CI #221
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- main | |
paths-ignore: | |
- '.editorconfig' | |
- '.gitignore' | |
- 'LICENSE' | |
- 'README.md' | |
workflow_dispatch: | |
pull_request: | |
jobs: | |
prepare: | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.gh.outputs.version }} | |
release: ${{ steps.gh.outputs.release }} | |
sha: ${{ steps.gh.outputs.sha }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: GH | |
id: gh | |
env: | |
REPO: ${{ github.repository }} | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
shell: bash | |
run: | | |
echo "version=$(cat Makefile | grep "PKG_VERSION :=" | sed 's/PKG_VERSION := //')" >> $GITHUB_OUTPUT | |
echo "release=$(cat Makefile | grep "PKG_RELEASE :=" | sed 's/PKG_RELEASE := //')" >> $GITHUB_OUTPUT | |
if [[ "${{ github.event_name }}" != "pull_request" ]]; then | |
echo "sha=$(echo ${GITHUB_SHA::7})" >> $GITHUB_OUTPUT | |
else | |
echo "sha=$(gh api repos/$REPO/commits/main --jq '.sha[:7]')" >> $GITHUB_OUTPUT | |
fi | |
cat $GITHUB_OUTPUT | |
build-static: | |
needs: prepare | |
name: build ${{ matrix.arch }} | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
arch: [x86_64, x86, aarch64, armhf, armv7] | |
branch: [latest-stable] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up ccache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ github.workspace }}/.ccache | |
key: ccache-${{ matrix.arch }}-${{ github.run_id }} | |
restore-keys: ccache-${{ matrix.arch }}- | |
- name: Set up Alpine Linux for ${{ matrix.arch }} | |
uses: jirutka/setup-alpine@v1 | |
with: | |
arch: ${{ matrix.arch }} | |
branch: ${{ matrix.branch }} | |
packages: > | |
bash build-base ccache coreutils findutils gawk git grep tar wget xz | |
autoconf automake libtool pkgconf linux-headers | |
shell-name: alpine.sh | |
- name: Build inside chroot | |
id: build | |
env: | |
ARCH: ${{ matrix.arch }} | |
CCACHE_DIR: ${{ github.workspace }}/.ccache | |
VERSION: ${{ needs.prepare.outputs.version }} | |
RELEASE: ${{ needs.prepare.outputs.release }} | |
SHA: ${{ needs.prepare.outputs.sha }} | |
shell: alpine.sh {0} | |
run: | | |
case $ARCH in | |
x86_64) PLATFORM=x86-64 ;; | |
x86) PLATFORM=x86 ;; | |
aarch64) PLATFORM=arm64 ;; | |
armhf) PLATFORM=arm ;; | |
*) PLATFORM=$ARCH ;; | |
esac | |
make -j$(nproc) CC="ccache gcc -static-libgcc -static" || exit 1 | |
strip -s build/youtubeUnblock | |
cp -va build/youtubeUnblock . | |
tar -czvf youtubeUnblock-$VERSION-$RELEASE-$SHA-$PLATFORM-static.tar.gz youtubeUnblock youtubeUnblock.service README.md | |
ccache --show-stats | |
- name: Upload artifacts | |
if: steps.build.outcome == 'success' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: youtubeUnblock-static-${{ matrix.arch }} | |
path: ./**/youtubeUnblock*.tar.gz | |
build-static-cross: | |
needs: prepare | |
name: build ${{ matrix.arch }} | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
include: | |
- arch: mips64el | |
tool: mips64el-unknown-linux-musl | |
- arch: mips64 | |
tool: mips64-unknown-linux-musl | |
- arch: mipsel | |
tool: mipsel-unknown-linux-musl | |
- arch: mipselsf | |
tool: mipsel-unknown-linux-muslsf | |
- arch: mips | |
tool: mips-unknown-linux-musl | |
- arch: mipssf | |
tool: mips-unknown-linux-muslsf | |
- arch: armv7sf | |
tool: armv7-unknown-linux-musleabi | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up build tools | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
REPO: 'musl-cross/musl-cross' | |
TOOL: ${{ matrix.tool }} | |
run: | | |
mkdir -p $HOME/tools | |
gh api repos/$REPO/releases/latest --jq '.tag_name' |\ | |
xargs -I{} wget -qO- https://github.com/$REPO/releases/download/{}/$TOOL.tar.xz | tar -C $HOME/tools -xJ || exit 1 | |
[ -d "$HOME/tools/$TOOL/bin" ] && echo "$HOME/tools/$TOOL/bin" >> $GITHUB_PATH | |
- name: Build | |
id: build | |
env: | |
ARCH: ${{ matrix.arch }} | |
TOOL: ${{ matrix.tool }} | |
VERSION: ${{ needs.prepare.outputs.version }} | |
RELEASE: ${{ needs.prepare.outputs.release }} | |
SHA: ${{ needs.prepare.outputs.sha }} | |
run: | | |
make -j$(nproc) \ | |
CC="$TOOL-gcc -static-libgcc -static" \ | |
LD=$TOOL-ld \ | |
AR=$TOOL-ar \ | |
NM=$TOOL-nm \ | |
STRIP=$TOOL-strip \ | |
CROSS_COMPILE_PLATFORM=$TOOL || exit 1 | |
$TOOL-strip -s build/youtubeUnblock | |
cp -va build/youtubeUnblock . | |
tar -czvf youtubeUnblock-$VERSION-$RELEASE-$SHA-$ARCH-static.tar.gz youtubeUnblock youtubeUnblock.service README.md | |
- name: Upload artifacts | |
if: steps.build.outcome == 'success' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: youtubeUnblock-static-${{ matrix.arch }} | |
path: ./**/youtubeUnblock*.tar.gz | |
build-openwrt: | |
needs: prepare | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
branch: | |
- openwrt-23.05 | |
- SNAPSHOT | |
include: | |
- branch: SNAPSHOT | |
package_extension: apk | |
- branch: openwrt-23.05 | |
package_extension: ipk | |
arch: | |
- aarch64_cortex-a53 | |
- aarch64_cortex-a72 | |
- aarch64_generic | |
- arm_arm1176jzf-s_vfp | |
- arm_arm926ej-s | |
- arm_cortex-a15_neon-vfpv4 | |
- arm_cortex-a5_vfpv4 | |
- arm_cortex-a7 | |
- arm_cortex-a7_neon-vfpv4 | |
- arm_cortex-a7_vfpv4 | |
- arm_cortex-a8_vfpv3 | |
- arm_cortex-a9 | |
- arm_cortex-a9_neon | |
- arm_cortex-a9_vfpv3-d16 | |
- arm_fa526 | |
- arm_mpcore | |
- arm_xscale | |
- mips64_octeonplus | |
- mips_24kc | |
- mips_4kec | |
- mips_mips32 | |
- mipsel_24kc | |
- mipsel_24kc_24kf | |
- mipsel_74kc | |
- mipsel_mips32 | |
- x86_64 | |
exclude: | |
- branch: SNAPSHOT | |
arch: arm_mpcore | |
container: | |
image: openwrt/sdk:${{ matrix.arch }}-${{ matrix.branch }} | |
options: --user root | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: 'openwrt' | |
- name: Prepare build | |
env: | |
VERSION: ${{ needs.prepare.outputs.version }} | |
RELEASE: ${{ needs.prepare.outputs.release }} | |
SHA: ${{ needs.prepare.outputs.sha }} | |
run: | | |
sed -i "s/PKG_REV:=.*$/PKG_REV:=$SHA/;s/PKG_VERSION:=.*$/PKG_VERSION:=$VERSION/;s/PKG_RELEASE:=.*$/PKG_RELEASE:=$RELEASE/;" youtubeUnblock/Makefile | |
- name: Initilalize SDK | |
id: init_sdk | |
env: | |
VERSION: ${{ needs.prepare.outputs.version }} | |
RELEASE: ${{ needs.prepare.outputs.release }} | |
SHA: ${{ needs.prepare.outputs.sha }} | |
working-directory: /builder | |
run: | | |
HOME=/builder ./setup.sh | |
- name: Add signing key | |
if: matrix.package_extension == 'apk' | |
id: signing_key | |
env: | |
SIGNING_KEY: ${{ secrets.EC_PRIVATE_KEY }} | |
working-directory: /builder | |
run: | | |
([ -n "$SIGNING_KEY" ] && echo "$SIGNING_KEY" > private-key.pem) || true | |
- name: Build packages | |
id: build | |
env: | |
VERSION: ${{ needs.prepare.outputs.version }} | |
RELEASE: ${{ needs.prepare.outputs.release }} | |
SHA: ${{ needs.prepare.outputs.sha }} | |
working-directory: /builder | |
run: | | |
echo "src-link youtubeUnblock $GITHUB_WORKSPACE" >> feeds.conf | |
cat feeds.conf | |
./scripts/feeds update youtubeUnblock | |
./scripts/feeds install -a -p youtubeUnblock | |
make defconfig | |
make package/youtubeUnblock/compile V=s | |
mv $(find ./bin -type f -name "youtubeUnblock*.${{ matrix.package_extension }}") ./youtubeUnblock-$VERSION-$RELEASE-$SHA-${{ matrix.arch }}-${{ matrix.branch }}.${{ matrix.package_extension }} | |
- name: Upload packages | |
if: steps.build.outcome == 'success' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: youtubeUnblock-${{ matrix.branch }}-${{ matrix.arch }} | |
path: /builder/youtubeUnblock*.${{ matrix.package_extension }} | |
if-no-files-found: error | |
build-openwrt-luci: | |
needs: prepare | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
branch: | |
- openwrt-23.05 | |
- SNAPSHOT | |
arch: | |
- x86_64 | |
include: | |
- branch: SNAPSHOT | |
package_extension: apk | |
- branch: openwrt-23.05 | |
package_extension: ipk | |
container: | |
image: openwrt/sdk:${{ matrix.arch }}-${{ matrix.branch }} | |
options: --user root | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: 'openwrt' | |
- name: Initilalize SDK | |
id: init_sdk | |
env: | |
VERSION: ${{ needs.prepare.outputs.version }} | |
RELEASE: ${{ needs.prepare.outputs.release }} | |
SHA: ${{ needs.prepare.outputs.sha }} | |
working-directory: /builder | |
run: | | |
HOME=/builder ./setup.sh | |
- name: Add signing key | |
if: matrix.package_extension == 'apk' | |
id: signing_key | |
env: | |
SIGNING_KEY: ${{ secrets.EC_PRIVATE_KEY }} | |
working-directory: /builder | |
run: | | |
([ -n "$SIGNING_KEY" ] && echo "$SIGNING_KEY" > private-key.pem) || true | |
- name: Build packages | |
id: build | |
env: | |
VERSION: ${{ needs.prepare.outputs.version }} | |
RELEASE: ${{ needs.prepare.outputs.release }} | |
SHA: ${{ needs.prepare.outputs.sha }} | |
working-directory: /builder | |
run: | | |
echo "src-link youtubeUnblock $GITHUB_WORKSPACE" >> feeds.conf | |
cat feeds.conf | |
./scripts/feeds update youtubeUnblock | |
./scripts/feeds install -a -p youtubeUnblock | |
make defconfig | |
make package/luci-app-youtubeUnblock/compile V=s | |
mv $(find ./bin -type f -name 'luci-app-youtubeUnblock*.${{ matrix.package_extension }}') ./luci-app-youtubeUnblock-$VERSION-$RELEASE-$SHA.${{ matrix.package_extension }} | |
- name: Upload packages | |
if: steps.build.outcome == 'success' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: luci-app-youtubeUnblock-${{ matrix.branch }} | |
path: /builder/luci-app-youtubeUnblock*.${{ matrix.package_extension }} | |
if-no-files-found: error | |
build-entware: | |
needs: prepare | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
arch: | |
- aarch64-3.10 | |
- armv7-3.2 | |
- mips-3.4 | |
- mipsel-3.4 | |
- x64-3.2 | |
- x86-2.6 | |
- armv7-2.6 | |
container: | |
image: waujito/entware_builder:${{ matrix.arch }} | |
options: --user root | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: 'openwrt' | |
- name: Prepare build | |
env: | |
VERSION: ${{ needs.prepare.outputs.version }} | |
RELEASE: ${{ needs.prepare.outputs.release }} | |
SHA: ${{ needs.prepare.outputs.sha }} | |
run: | | |
sed -i "s/PKG_REV:=.*$/PKG_REV:=$SHA/;s/PKG_VERSION:=.*$/PKG_VERSION:=$VERSION/;s/PKG_RELEASE:=.*$/PKG_RELEASE:=$RELEASE/;" youtubeUnblockEntware/Makefile | |
- name: Build packages | |
id: build | |
working-directory: /home/me/Entware | |
env: | |
VERSION: ${{ needs.prepare.outputs.version }} | |
RELEASE: ${{ needs.prepare.outputs.release }} | |
SHA: ${{ needs.prepare.outputs.sha }} | |
run: | | |
echo "src-link youtubeUnblock $GITHUB_WORKSPACE" >> feeds.conf | |
cat feeds.conf | |
./scripts/feeds update youtubeUnblock | |
./scripts/feeds install -a -p youtubeUnblock | |
echo "CONFIG_PACKAGE_youtubeUnblockEntware=m" | tee -a .config | |
make package/youtubeUnblockEntware/compile V=s | |
mv $(find ./bin -type f -name 'youtubeUnblockEntware*.ipk') ./youtubeUnblock-$VERSION-$RELEASE-$SHA-entware-${{ matrix.arch }}.ipk | |
- name: Upload packages | |
if: steps.build.outcome == 'success' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: youtubeUnblock-entware-${{ matrix.arch }} | |
path: /home/me/Entware/youtubeUnblock*.ipk | |
if-no-files-found: error | |
pre-release: | |
if: github.event_name != 'pull_request' && github.ref_name == 'main' | |
needs: [build-static, build-static-cross, build-openwrt, build-entware, build-openwrt-luci] | |
permissions: | |
contents: write | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
- name: Upload assets | |
uses: slord399/action-automatic-releases@v1.0.1 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
automatic_release_tag: 'continuous' | |
prerelease: true | |
draft: true | |
title: 'Development build' | |
files: | | |
./**/youtubeUnblock*.ipk | |
./**/youtubeUnblock*.apk | |
./**/youtubeUnblock*.tar.gz | |
./**/luci-app-youtubeUnblock*.ipk | |
./**/luci-app-youtubeUnblock*.apk |