Skip to content

Release

Release #28

Workflow file for this run

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