Files
2026-10-29 18:46:39 +08:00

79 lines
2.9 KiB
YAML

name: Build package
on:
workflow_dispatch:
inputs:
version:
description: "OpenWrt release: 'latest' (latest stable), 'snapshot' (master), or a release like '24.10.8' / 'v24.10.8'"
required: false
default: "latest"
arch:
description: "OpenWrt package architecture, e.g. aarch64_cortex-a53 (mediatek/filogic), x86_64"
required: false
default: "aarch64_cortex-a53"
jobs:
build:
name: Build (${{ inputs.arch }}-${{ inputs.version }})
runs-on: ubuntu-latest
steps:
- name: Determine OpenWrt SDK release
id: version
env:
GH_TOKEN: ${{ github.token }}
REQUESTED: ${{ inputs.version }}
run: |
set -eu
case "${REQUESTED}" in
latest)
# Resolve the latest stable OpenWrt release by semantic version
# (the GitHub releases API orders by created_at, so a newer point
# release of an older series, e.g. v24.10.8 created after v25.12.5,
# would otherwise be picked first). Skip RCs / pre-releases.
tag="$(gh api \
-H "Accept: application/vnd.github+json" \
/repos/openwrt/openwrt/releases \
--paginate \
-q '[.[] | select(.prerelease == false and (.tag_name | test("-rc|-RC")) | not) | .tag_name] | sort_by(ltrimstr("v") | split(".") | map(tonumber? // 0)) | last')"
if [ -z "${tag}" ]; then
echo "Could not determine latest OpenWrt release" >&2
exit 1
fi
echo "Resolved latest OpenWrt release: ${tag}"
release="${tag#v}"
;;
snapshot|master)
release="master"
;;
*)
release="${REQUESTED#v}"
;;
esac
echo "release=${release}" >> "${GITHUB_OUTPUT}"
# Checkout the repository into a subdirectory named after the package.
# openwrt/gh-action-sdk mounts the workspace as a feed (src-link -> /feed)
# and the OpenWrt feed scanner skips a Makefile at the feed root, so the
# package must live one directory level deep to be discovered.
- name: Checkout package
uses: actions/checkout@v4
with:
path: luci-app-dnsmasq-ipset
- name: Build package
uses: openwrt/gh-action-sdk@v11
env:
ARCH: ${{ inputs.arch }}-${{ steps.version.outputs.release }}
PACKAGES: luci-app-dnsmasq-ipset
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: luci-app-dnsmasq-ipset-${{ steps.version.outputs.release }}-${{ inputs.arch }}
# Collect both package formats: OpenWrt 25.12+ defaults to
# CONFIG_USE_APK=y and produces .apk, while older releases (e.g.
# 24.10.x) still produce .ipk.
path: bin/**/luci-app-dnsmasq-ipset*.*pk
if-no-files-found: error