Skip to content

Build and Release AppBundles - ng #51

Build and Release AppBundles - ng

Build and Release AppBundles - ng #51

Workflow file for this run

name: Build and Release AppBundles - ng
on:
schedule:
- cron: '0 0 * * 0'
workflow_dispatch:
inputs:
script_pattern:
description: "Pattern to match scripts to build (leave empty to build all)"
required: false
default: ""
release:
description: "Create a release (true/false)"
required: false
default: "true"
jobs:
build:
name: Build and Release Packages
runs-on: ubuntu-latest
permissions: write-all
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: 'stable'
- name: Prepare environment
run: |
GOBIN="$HOME/.local/bin"
mkdir -p "$GOBIN"
git clone --depth 1 --branch dev https://github.com/xplshn/pelf
cp ./pelf/pelf* "$GOBIN"
cp ./pelf/cmd/misc/* "$GOBIN"
echo "GOBIN=$GOBIN" >> $GITHUB_ENV
- name: Build lib4bin
run: |
cd pelf/cmd/dynexec/lib4bin
go build -o "$GOBIN/lib4bin"
- name: Install tools
run: |
DBIN_PGRS="dwarfs-tools bwrap-patched sharun yq jq eget2"
wget -qO- "https://raw.githubusercontent.com/xplshn/dbin/master/stubdl" | sh -s -- --install "$GOBIN/dbin" add $DBIN_PGRS
PATH="$GOBIN:$PATH"
ln -sfT "$GOBIN/dwarfs-tools" "$GOBIN/mkdwarfs"
ln -sfT "$GOBIN/dwarfs-tools" "$GOBIN/dwarfs"
ln -sfT "$GOBIN/bwrap-patched" "$GOBIN/bwrap"
echo "PATH=$PATH" >> $GITHUB_ENV
- name: Select latest Edge Alpine rootfs
id: rootfs
run: |
ROOTFS_URL="$(curl -qsL https://dl-cdn.alpinelinux.org/alpine/edge/releases/x86_64/latest-releases.yaml | yq '.[0].file')"
ROOTFS_URL="https://dl-cdn.alpinelinux.org/alpine/edge/releases/$(uname -m)/${ROOTFS_URL}"
echo "ROOTFS_URL=$ROOTFS_URL" >> $GITHUB_ENV
- name: Set OUT_DIR environment variable
run: |
OUT_DIR="${{ github.workspace }}/APPBUNDLES" # Store in workspace
mkdir -p "$OUT_DIR"
echo "OUT_DIR=${OUT_DIR}" >> $GITHUB_ENV
- name: Create pelf environment
run: |
cd "$OUT_DIR"
pelfCreator -m xplshn -n musl_C_Go_Fyne_DevEnv -p "fuse3 fuse build-base libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev linux-headers mesa-dev go git bash" -c
- name: List available scripts
run: |
echo "Listing available recipes:"
tree "${{ github.workspace }}/recipes"
- name: Run selected build scripts in OUT_DIR
run: |
cd $OUT_DIR
SCRIPT_PATTERN="${{ github.event.inputs.script_pattern }}"
if [ -z "$SCRIPT_PATTERN" ]; then
echo "No script pattern provided, running all scripts."
PATTERN=".*" # Match all scripts
else
echo "Pattern provided: $SCRIPT_PATTERN"
PATTERN="$SCRIPT_PATTERN"
fi
for script in "${{ github.workspace }}/recipes/"*/*.*sh; do
if echo "$script" | grep -E "$PATTERN"; then
echo "Running $script"
chmod +x "$script"
DEBUG=1 ./musl_C_Go_Fyne_DevEnv*.AppDir/AppRun sh "$script"
else
echo "Skipping $script (does not match pattern)"
fi
done
- name: List output
run: |
echo "Archiving output from $OUT_DIR"
ls "$OUT_DIR"
- name: Upload build artifacts
if: ${{ github.event.inputs.release == 'false' }} # Only upload artifacts if no release
uses: actions/upload-artifact@v4
with:
name: app-bundles
path: ${{ env.OUT_DIR }}/*.AppBundle
- name: Manage Tags
if: ${{ github.event.inputs.release == 'true' }} # Only manage tags for releases
run: |
git fetch --tags
TAGS=$(git tag | sort -V)
TAG_COUNT=$(echo "$TAGS" | wc -l)
if [ "$TAG_COUNT" -gt 5 ]; then
TAGS_TO_DELETE=$(echo "$TAGS" | head -n -1)
for TAG in $TAGS_TO_DELETE; do
echo "Deleting tag: $TAG"
git tag -d "$TAG"
git push origin --delete "$TAG"
done
else
echo "Tag count is $TAG_COUNT, no tags to delete."
fi
- name: Create Git Tag
if: ${{ github.event.inputs.release == 'true' }} # Only create tag for releases
run: |
TAG_NAME="v$(date +'%Y%m%d%H%M%S')" # Generate tag based on current timestamp
echo "Creating tag: $TAG_NAME"
git tag "$TAG_NAME"
git push origin "$TAG_NAME"
echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV
- name: Create Release
if: ${{ github.event.inputs.release == 'true' }} # Conditional release
uses: softprops/[email protected]
with:
name: "Weekly Release - ${{ env.TAG_NAME }}"
tag_name: "${{ env.TAG_NAME }}"
prerelease: false
draft: false
generate_release_notes: false
make_latest: true
files: |
${{ env.OUT_DIR }}/*.AppBundle
continue-on-error: true