Added Release Pipeline
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
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:
|
||||
matrix: ${{ steps.release.outputs.matrix }}
|
||||
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}"
|
||||
matrix="$(jq -c '{include: .targets}' .gitea/release-targets.json)"
|
||||
jq -e '.targets | length > 0' .gitea/release-targets.json >/dev/null
|
||||
printf 'version=%s\n' "$version" >>"$GITHUB_OUTPUT"
|
||||
printf 'matrix=%s\n' "$matrix" >>"$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
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix: ${{ fromJSON(needs.metadata.outputs.matrix) }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install SDK build dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install --yes 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
|
||||
- name: Build ${{ matrix.architecture }} package
|
||||
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 }}
|
||||
ASSET: dist/openUniFi-${{ matrix.architecture }}-${{ needs.metadata.outputs.version }}.apk
|
||||
run: scripts/ci/gitea-release.sh upload
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user