Files
OpenUniFi/.gitea/workflows/release.yaml
T
2026-07-15 19:36:45 +00:00

112 lines
4.0 KiB
YAML

name: Build and publish release
on:
push:
branches: [main]
workflow_dispatch:
concurrency:
group: openunifi-release
cancel-in-progress: false
permissions:
code: read
releases: write
jobs:
metadata:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.release.outputs.version }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install metadata dependencies
run: sudo apt-get update && sudo apt-get install --yes jq
- name: Read release configuration
id: release
shell: bash
run: |
set -euo pipefail
major="$(jq -er '.version.major | select(type == "number" and floor == . and . >= 0)' .gitea/release-targets.json)"
minor="$(jq -er '.version.minor | select(type == "number" and floor == . and . >= 0)' .gitea/release-targets.json)"
tag_prefix="v${major}.${minor}."
latest_patch=-1
while IFS= read -r tag; do
candidate="${tag#"$tag_prefix"}"
if [[ $candidate =~ ^(0|[1-9][0-9]*)$ ]] && (( candidate > latest_patch )); then
latest_patch=$candidate
fi
done < <(git tag --list "${tag_prefix}*")
patch=$((latest_patch + 1))
version="${major}.${minor}.${patch}"
jq -e '
(.targets | length > 0) and
([.targets[].architecture] | length == (unique | length)) and
all(.targets[]; (.architecture | type == "string" and test("^[A-Za-z0-9_-]+$")))
' .gitea/release-targets.json >/dev/null
printf 'version=%s\n' "$version" >>"$GITHUB_OUTPUT"
create-release:
needs: metadata
runs-on: ubuntu-latest
outputs:
release-id: ${{ steps.create.outputs.release-id }}
steps:
- uses: actions/checkout@v4
- name: Install release dependencies
run: sudo apt-get update && sudo apt-get install --yes curl jq
- name: Create draft release
id: create
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
VERSION: ${{ needs.metadata.outputs.version }}
run: |
release_id="$(scripts/ci/gitea-release.sh create)"
printf 'release-id=%s\n' "$release_id" >>"$GITHUB_OUTPUT"
build:
needs: [metadata, create-release]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install SDK build dependencies
shell: bash
run: |
sudo apt-get update
packages=(build-essential clang flex bison g++ gawk gettext git libncurses-dev libssl-dev python3 rsync unzip zlib1g-dev file wget patch time curl jq zstd)
case "$(uname -m)" in
aarch64|arm64|armv7l|armv8l)
packages+=(qemu-user-static)
;;
esac
sudo apt-get install --yes "${packages[@]}"
- name: Build and upload configured packages
env:
ARCHITECTURE: ${{ matrix.architecture }}
VERSION: ${{ needs.metadata.outputs.version }}
run: scripts/ci/build-release.sh .gitea/release-targets.json "$ARCHITECTURE" "$VERSION" dist
- name: Upload package to draft release
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
RELEASE_ID: ${{ needs.create-release.outputs.release-id }}
VERSION: ${{ needs.metadata.outputs.version }}
run: |
set -euo pipefail
while IFS= read -r architecture; do
scripts/ci/build-release.sh .gitea/release-targets.json "$architecture" "$VERSION" dist
ASSET="dist/openUniFi-${architecture}-${VERSION}.apk" scripts/ci/gitea-release.sh upload
done < <(jq -r '.targets[].architecture' .gitea/release-targets.json)
publish-release:
needs: [metadata, create-release, build]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Publish completed release
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
RELEASE_ID: ${{ needs.create-release.outputs.release-id }}
run: scripts/ci/gitea-release.sh publish