Skip to content

Commit

Permalink
feat(repo): add beta/pre-release packages
Browse files Browse the repository at this point in the history
  • Loading branch information
ReenigneArcher committed Jul 11, 2024
1 parent db0962a commit 68d029d
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 29 deletions.
124 changes: 114 additions & 10 deletions .github/workflows/build-repo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,30 @@ jobs:
build-pacman-repo:
runs-on: ubuntu-latest
container:
image: archlinux:base-devel
image: archlinux/archlinux:base-devel
env:
DISPLAY: ":1"
strategy:
fail-fast: false
matrix:
include:
- repo: lizardbyte
release_name: stable
- repo: lizardbyte-beta
release_name: beta
steps:
- name: Container Setup
run: |
pacman -Syy --disable-download-timeout --needed --noconfirm \
archlinux-keyring
pacman -Syu --disable-download-timeout --needed --noconfirm \
archlinux-keyring \
base-devel \
cmake \
git \
reflector \
jq \
wget \
xorg-server-xvfb
- name: Update mirrors
run: |
reflector --latest 10 --protocol http,https --sort rate --save /etc/pacman.d/mirrorlist
pacman -Scc --noconfirm
- name: Download Pacman Repo Builder
env:
Expand All @@ -44,17 +52,112 @@ jobs:
-O /usr/bin/build-pacman-repo
chmod +x /usr/bin/build-pacman-repo
# patch makepkg to allow running as root
build-pacman-repo patch-makepkg --replace
- name: Checkout
uses: actions/checkout@v4

- name: Download and Patch beta PKGBUILDs
if: matrix.repo == 'lizardbyte-beta'
run: |
# we don't want any stable packages to be built, so remove them
rm -rf pkgbuilds
mkdir -p pkgbuilds
cd pkgbuilds
while IFS=' ' read -r repo og_pkg_name updated_pkg_name release_asset; do
# Skip lines that start with #
[[ $repo =~ ^#.*$ ]] && continue
echo "repo: ${repo}"
echo "og_pkg_name: ${og_pkg_name}"
echo "updated_pkg_name: ${updated_pkg_name}"
echo "release_asset: ${release_asset}"
# get the first release with the specified asset (pre-releases first, followed by stable)
latest_release=$(
curl -s "https://api.github.com/repos/${repo}/releases" | \
jq -r --arg release_asset "${release_asset}" '
map(.assets[] | select(.name == $release_asset) | .browser_download_url) |
first
'
)
echo "latest_release: ${latest_release}"
if [[ -z "${latest_release}" ]]; then
echo "::warning:: No pre-release found for ${repo} with asset ${release_asset}"
continue
fi
mkdir -p ${updated_pkg_name}
pushd ${updated_pkg_name}
wget "${latest_release}" -O "${updated_pkg_name}.pkg.tar.gz"
# extract the package
tar -xvf "${updated_pkg_name}.pkg.tar.gz"
rm "${updated_pkg_name}.pkg.tar.gz"
# sed PKGBUILD
sed -i "s/pkgname='${og_pkg_name}'/pkgname='${updated_pkg_name}'/" PKGBUILD
sed -i "s/provides=(.*)/provides=('${og_pkg_name}')/" PKGBUILD
sed -i "s/conflicts=(.*)/conflicts=('${og_pkg_name}')/" PKGBUILD
# Check if provides is missing and append if necessary
if ! grep -q "^provides=" PKGBUILD; then
echo "provides=('${og_pkg_name}')" >> PKGBUILD
fi
# Check if conflicts is missing and append if necessary
if ! grep -q "^conflicts=" PKGBUILD; then
echo "conflicts=('${og_pkg_name}')" >> PKGBUILD
fi
echo "new PKGBUILD:"
cat PKGBUILD
# re-generate .SRCINFO
makepkg --printsrcinfo > .SRCINFO
# list files
echo "files in ${updated_pkg_name}:"
ls -a
popd
done < ../beta-repos.conf
- name: Init
run: |
# create the destination directory for built packages
mkdir -p repo
# patch the build flags
sed -i 's,#MAKEFLAGS="-j2",MAKEFLAGS="-j$(nproc)",g' /etc/makepkg.conf
# start Xvfb which may be used for unit tests
Xvfb ${DISPLAY} -screen 0 1024x768x24 &
- name: Build Pacman Repo
run: |
build-pacman-repo patch-makepkg --replace
# generate build-pacman-repo.yaml
build-pacman-repo print-config \
--repository repo/${{ matrix.repo }}.db.tar.gz \
--container pkgbuilds \
--require-pkgbuild \
--require-srcinfo \
--with-record-failed-builds repo/failed-build-records.yaml \
--with-install-missing-dependencies true \
--with-clean-before-build false \
--with-clean-after-build false \
--with-force-rebuild true \
--with-pacman pacman \
--with-arch-filter x86_64 \
--with-check inherit \
--with-packager "${{ secrets.GH_BOT_NAME }} <${{ secrets.GH_BOT_EMAIL }}>" \
--with-allow-failure false \
--with-dereference-database-symlinks true \
> build-pacman-repo.yaml
build-pacman-repo build
- name: Create/Update GitHub Release
Expand All @@ -66,7 +169,8 @@ jobs:
artifacts: repo/*
bodyFile: README.md
commit: master
name: repo
makeLatest: ${{ matrix.repo == 'lizardbyte' && 'true' || 'false' }}
name: ${{ matrix.release_name }}
prerelease: false
tag: repo
tag: ${{ matrix.release_name }}
token: ${{ secrets.GH_BOT_TOKEN }}
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ SigLevel = Optional
Server = https://github.com/LizardByte/pacman-repo/releases/latest/download
```

```conf
[lizardbyte-beta]
SigLevel = Optional
Server = https://github.com/LizardByte/pacman-repo/releases/beta/download
```

Then, run `sudo pacman -Sy` to update repository.

## Packages
Expand All @@ -25,17 +31,20 @@ Then, run `sudo pacman -Sy` to update repository.

```bash
pacman -Sl lizardbyte
pacman -Sl lizardbyte-beta
```

### Install repo packages

```bash
sudo pacman -S lizardbyte/<package-name>
sudo pacman -S lizardbyte-beta/<package-name>
```

e.g.
```bash
sudo pacman -S lizardbyte/sunshine
sudo pacman -S lizardbyte-beta/sunshine-git
```

## Considerations
Expand Down
2 changes: 2 additions & 0 deletions beta-repos.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# repo_owner/repo_name og_pkg_name updated_pkg_name release_asset_file_name
lizardbyte/sunshine sunshine sunshine-git sunshine.pkg.tar.gz
19 changes: 0 additions & 19 deletions build-pacman-repo.yaml

This file was deleted.

0 comments on commit 68d029d

Please sign in to comment.