iStoreNAS/.github/workflows/ci.yml

145 lines
5.0 KiB
YAML
Raw Normal View History

2023-11-08 17:12:15 +08:00
name: iStore Intl Builder
on:
workflow_dispatch:
2023-11-08 20:18:40 +08:00
inputs:
target:
description: 'build target ["x86_64", "rk35xx", "rk33xx", "rpi4", "all"]'
required: true
default: 'all'
2023-11-08 17:12:15 +08:00
env:
TZ: Asia/Shanghai
jobs:
2023-11-08 20:18:40 +08:00
matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Detect build target
id: set-matrix
env:
MATRIX_TARGET: ${{ github.event.inputs.target }}
run: |
if [ "x${MATRIX_TARGET}" = "x" -o "x${MATRIX_TARGET}" = "xall" ]; then \
echo "matrix={\"target\":[\"x86_64\", \"rk35xx\", \"rk33xx\", \"rpi4\"]}" >> $GITHUB_OUTPUT; \
else \
targets=""; \
for target in ${MATRIX_TARGET}; do \
targets="$targets, \"$target\"";
done; \
echo "matrix={\"target\":[${targets#, }]}" >> $GITHUB_OUTPUT; \
fi
2023-11-08 17:12:15 +08:00
build:
2023-11-08 20:18:40 +08:00
needs: matrix
2023-11-08 17:12:15 +08:00
runs-on: ubuntu-latest
2023-11-08 20:18:40 +08:00
name: iStore Intl for ${{ matrix.target }}
strategy:
matrix: ${{fromJson(needs.matrix.outputs.matrix)}}
2023-11-08 17:12:15 +08:00
steps:
- name: Checkout
uses: actions/checkout@main
with:
fetch-depth: 1
2023-11-08 20:18:40 +08:00
- name: Import Env
env:
MATRIX_TARGET: ${{ matrix.target }}
run: cat env/${MATRIX_TARGET}.env >> "$GITHUB_ENV"
2023-11-08 17:12:15 +08:00
- name: Initialization environment
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo -E apt-get -qq update
sudo -E apt-get -qq install binutils bzip2 xz-utils unzip git wget patch device-tree-compiler
sudo -E apt-get -qq clean
sudo timedatectl set-timezone "$TZ"
2023-11-09 14:50:18 +08:00
- name: Install ORAS
env:
VERSION: 1.1.0
run: |
wget -O /tmp/oras.tar.gz "https://github.com/oras-project/oras/releases/download/v${VERSION}/oras_${VERSION}_linux_amd64.tar.gz"
mkdir -p /tmp/oras-install/
tar -zxf /tmp/oras.tar.gz -C /tmp/oras-install/
sudo mv /tmp/oras-install/oras /usr/local/bin/
rm -rf /tmp/oras.tar.gz /tmp/oras-install/
2023-11-08 17:12:15 +08:00
- name: Download IB
run: |
2023-11-08 17:14:36 +08:00
mkdir dl
2023-11-08 17:12:15 +08:00
wget -O dl/${IB_NAME}.tar.xz ${IB_URL}${IB_NAME}.tar.xz
wget -O dl/sha256sums ${IB_URL}sha256sums
2023-11-08 17:23:12 +08:00
[ -s dl/sha256sums ]
[ -s dl/${IB_NAME}.tar.xz ]
grep -Fq ${IB_NAME}.tar.xz dl/sha256sums
2023-11-08 17:17:43 +08:00
cd dl && sha256sum -c --ignore-missing --status sha256sums
2024-03-24 23:42:12 +08:00
wget -O dl/${MF_NAME} ${IB_URL}${MF_NAME}
2023-11-08 17:12:15 +08:00
- name: Unpack IB
run: |
mkdir ib
2023-11-08 17:23:12 +08:00
tar -C ib --strip-components=1 -xJf dl/${IB_NAME}.tar.xz
2023-11-08 17:12:15 +08:00
cp -a src/* ib/
ls patches/ | sort | xargs -n1 sh -c 'patch -p1 -d ib -i ../patches/$0'
sed -i 's/ unofficial/ oversea/' ib/Makefile
ls packages/all | cut -d "_" -f 1 | xargs -n1 sh -c 'rm ib/packages/$0*.ipk'
cp packages/all/*.ipk ib/packages/
2024-03-24 23:42:12 +08:00
case ${IB_URL} in
2024-03-19 20:41:17 +08:00
*x86*)
2024-03-20 08:32:54 +08:00
cp src/repositories_x86_64.conf ib/repositories.conf
2024-03-24 23:42:12 +08:00
cp src/target_x86_64.manifest ib/target.manifest
;;
*rk35xx*)
cp src/repositories_aarch64.conf ib/repositories.conf
cp src/target_rk35xx.manifest ib/target.manifest
;;
*rk33xx*)
cp src/repositories_aarch64.conf ib/repositories.conf
cp src/target_rk33xx.manifest ib/target.manifest
;;
*bcm2711*)
cp src/repositories_aarch64.conf ib/repositories.conf
cp src/target_bcm2711.manifest ib/target.manifest
2024-03-19 20:41:17 +08:00
;;
esac
2023-11-08 17:12:15 +08:00
- name: Build
run: |
2023-11-08 20:18:40 +08:00
echo "istoreos-intl - *" >> ib/target.manifest
2023-11-08 17:12:15 +08:00
cd ib && make -f multi.mk image_multi
2023-11-08 20:18:40 +08:00
- name: Pack
run: |
cd ib
make -f release.mk IB=1
make -f multi.mk release_env >> "$GITHUB_ENV"
2023-11-09 14:50:18 +08:00
- name: Compare manifest
2023-11-08 20:18:40 +08:00
run: |
cd ib
2023-12-22 21:01:24 +08:00
diff ../dl/${MF_NAME} ${IB_BIN_DIR}/${MF_NAME} || true
2023-11-09 14:50:18 +08:00
- name: Upload
env:
OCI_REGISTER: ghcr.io
OCI_USERNAME: ${{ secrets.OCI_USERNAME }}
OCI_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
OCI_PATH: ${{ secrets.OCI_PATH }}
IMAGE_SOURCE: ${{ secrets.IMAGE_SOURCE }}
run: |
oras login -u ${OCI_USERNAME} -p ${OCI_PASSWORD} ${OCI_REGISTER}
cd build
for board in `ls ./`; do
[ -s $board/version.index ] || continue
img=$(head -1 $board/version.latest | sed -E 's/.*\((.+)\).*/\1/')
ver=$(head -1 $board/version.index)
echo "Uploading $board firmware..."
2023-12-22 21:37:35 +08:00
oras push --annotation "org.istoreos.version=$ver" \
--annotation "org.opencontainers.image.source=${IMAGE_SOURCE}" \
--annotation "org.opencontainers.image.description=iStoreOS $ver for $board" \
${OCI_REGISTER}/${OCI_PATH}/$board:latest \
2023-11-09 14:50:18 +08:00
./$board/$img:application/vnd.istoreos.firmware
done