Release #28
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: 'Version (SemVer)' | |
required: true | |
default: 0.0.0 | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
update-version: | |
name: Update version | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v5 | |
with: | |
fetch-depth: 0 | |
token: ${{ secrets.BOT_TOKEN }} | |
- name: Install cargo-edit | |
run: cargo install cargo-edit | |
- name: Update package version | |
run: cargo set-version ${{ github.event.inputs.version }} | |
- name: Upload working directory with current version-number | |
uses: actions/upload-artifact@v4 | |
with: | |
name: versioned-build | |
include-hidden-files: true | |
path: . | |
retention-days: 1 | |
build: | |
name: Build | |
runs-on: ubuntu-latest | |
needs: [update-version] | |
steps: | |
- name: Download working directory with current version-number | |
uses: actions/download-artifact@v5 | |
with: | |
name: versioned-build | |
path: . | |
- name: Build binary | |
run: cargo build --release | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: build-artifact | |
include-hidden-files: true | |
path: . | |
retention-days: 1 | |
update-metadata: | |
name: Update metadata | |
runs-on: ubuntu-latest | |
needs: [update-version] | |
steps: | |
- name: Download build artifacts | |
uses: actions/download-artifact@v5 | |
with: | |
name: versioned-build | |
- name: Generate tarball from current repo | |
run: | | |
VERSION=${{ github.event.inputs.version }} | |
git archive --format=tar.gz -o tiny4linux-${VERSION}.tar.gz HEAD | |
git archive --format=zip -o tiny4linux-${VERSION}.zip HEAD | |
- name: Update PKGBUILD & SRCINFO with new version and SHA | |
run: | | |
VERSION=${{ github.event.inputs.version }} | |
sha=$(sha256sum tiny4linux-${VERSION}.tar.gz | cut -d' ' -f1) | |
cd deployment/gui/aur | |
sed -i "s/^pkgver=.*/pkgver=${VERSION}/" PKGBUILD | |
sed -i "s/^pkgrel=.*/pkgrel=1/" PKGBUILD | |
sed -i "s/^sha256sums=.*/sha256sums=('${sha}')/" PKGBUILD | |
# Write-Permissions for Container-User | |
chmod -R 777 . | |
docker run --rm -v $PWD:/pkg archlinux:latest bash -c " | |
echo '=== inside container: start ===' | |
date | |
id || true | |
echo '/etc/passwd (tail):' && tail -n 50 /etc/passwd || true | |
echo 'pacman DB status:' && pacman -Qi pacman || true | |
# Update DB and install base-devel (non-interactive) | |
pacman -Sy --noconfirm --needed base-devel shadow || { echo 'pacman failed'; exit 2; } | |
# Check whether makepkg exists now | |
echo 'which makepkg:' && which makepkg || echo 'makepkg not found' | |
makepkg --version || true | |
# Create builder user if not exists, and ensure /pkg is owned by it | |
useradd -m builder || echo 'useradd returned non-zero (maybe user exists)' | |
chown -R builder:builder /pkg || { echo 'chown failed'; ls -la /pkg; exit 3; } | |
echo '--- before makepkg: /pkg listing ---' | |
ls -la /pkg || true | |
echo 'PKGBUILD head:' | |
head -n 40 PKGBUILD || true | |
# Run makepkg as builder; redirect stdout/stderr to files for CI inspection | |
su - builder -c 'cd /pkg && whoami && id && env | sort && pwd && ls -la && makepkg --printsrcinfo > .SRCINFO' > /tmp/makepkg.stdout 2> /tmp/makepkg.stderr || { | |
echo 'makepkg returned non-zero, dumping logs:'; | |
echo '--- makepkg.stdout ---'; sed -n '1,200p' /tmp/makepkg.stdout || true; | |
echo '--- makepkg.stderr ---'; sed -n '1,200p' /tmp/makepkg.stderr || true; | |
exit 4; | |
} | |
echo '--- makepkg stdout/stderr ---' | |
sed -n '1,200p' /tmp/makepkg.stdout || true | |
sed -n '1,200p' /tmp/makepkg.stderr || true | |
echo '--- after makepkg: /pkg listing ---' | |
ls -la /pkg || true | |
echo 'cat .SRCINFO (first 200 lines):' | |
sed -n '1,200p' .SRCINFO || true | |
echo '=== inside container: end ===' | |
" | |
# show host-side after docker run | |
echo "---- host side listing after docker run ----" | |
ls -la | |
echo "Contents of .SRCINFO on host (if present):" | |
if [ -f .SRCINFO ]; then | |
sed -n '1,200p' .SRCINFO || true | |
else | |
echo ".SRCINFO not found on host" | |
fi | |
- name: Upload tarballs and metadata | |
uses: actions/upload-artifact@v4 | |
with: | |
name: tarballs | |
include-hidden-files: true | |
path: | | |
tiny4linux-${{ github.event.inputs.version }}.tar.gz | |
tiny4linux-${{ github.event.inputs.version }}.zip | |
deployment/gui/aur/PKGBUILD | |
deployment/gui/aur/.SRCINFO | |
deployment/gui/aur/LICENSE | |
retention-days: 1 | |
add-version-commit: | |
name: Add version commit | |
runs-on: ubuntu-latest | |
needs: [update-version, update-metadata] | |
steps: | |
- name: Download working directory with current version-number | |
uses: actions/download-artifact@v5 | |
with: | |
name: versioned-build | |
path: . | |
- name: Download updated metadata | |
uses: actions/download-artifact@v5 | |
with: | |
name: tarballs | |
path: . | |
- name: Add a commit | |
run: | | |
git config --global user.name 'OpenFoxes Maintenance Bot' | |
git config --global user.email '[email protected]' | |
git init | |
git add . | |
git commit -m "🔖 Release Tiny4Linux ${{ github.event.inputs.version }}" | |
git tag v${{ github.event.inputs.version }} | |
git push -u origin HEAD:main --tags | |
create-github-release: | |
name: 'Create GitHub release' | |
runs-on: ubuntu-latest | |
needs: [build, update-metadata, add-version-commit] | |
steps: | |
- name: Download build artifacts | |
uses: actions/download-artifact@v5 | |
with: | |
name: build-artifact | |
path: . | |
- name: Download metadata | |
uses: actions/download-artifact@v5 | |
with: | |
name: tarballs | |
path: . | |
- uses: softprops/action-gh-release@v2 | |
with: | |
token: ${{ secrets.BOT_TOKEN }} | |
name: Version ${{ github.event.inputs.version }} | |
tag_name: v${{ github.event.inputs.version }} | |
files: | | |
target/release/obsbot-gui | |
target/release/obsbot-osc-server | |
tiny4linux-${{ github.event.inputs.version }}.tar.gz | |
tiny4linux-${{ github.event.inputs.version }}.zip | |
deploy-aur: | |
name: 'Deployment to AUR' | |
runs-on: ubuntu-latest | |
needs: [create-github-release] | |
steps: | |
- name: Setup SSH for AUR | |
run: | | |
mkdir -p ~/.ssh | |
echo "${{ secrets.AUR_SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519 | |
chmod 600 ~/.ssh/id_ed25519 | |
ssh-keyscan aur.archlinux.org >> ~/.ssh/known_hosts | |
- name: Clone AUR repository | |
run: | | |
git clone ssh://[email protected]/tiny4linux-gui.git aur-repo | |
- name: Download packed tarballs and metadata | |
uses: actions/download-artifact@v5 | |
with: | |
name: tarballs | |
path: aur-repo | |
- name: Commit & Push to the AUR | |
working-directory: aur-repo | |
run: | | |
cd deployment/gui/aur | |
git config user.name "OpenFoxes Maintenance Bot" | |
git config user.email "[email protected]" | |
git add PKGBUILD .SRCINFO LICENSE | |
git commit -m "Update to Version ${{ github.event.inputs.version }}" | |
git push | |
cleanup: | |
name: Cleanup | |
runs-on: ubuntu-latest | |
needs: [deploy-aur] | |
steps: | |
- name: Delete artifacts | |
uses: geekyeggo/delete-artifact@v5 | |
with: | |
name: | | |
versioned-build | |
build-artifact | |
tarballs |