Building images 🚀 #338
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: Images | |
run-name: "Building images 🚀" | |
on: [push] | |
jobs: | |
build-job: | |
name: Build | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
cfg: | |
- { model: "rt-ax92u", sdk: "src-rt-5.02axhnd", ui: "default", skip: false } | |
- { model: "dsl-ax82u", sdk: "src-rt-5.02axhnd.675x", ui: "default", skip: false } | |
- { model: "tuf-ax5400", sdk: "src-rt-5.02axhnd.675x", ui: "default", skip: false } | |
- { model: "tuf-ax5400", sdk: "src-rt-5.02axhnd.675x", ui: "tuf", skip: false } | |
- { model: "tuf-ax3000", sdk: "src-rt-5.02axhnd.675x", ui: "default", skip: false } | |
- { model: "tuf-ax3000", sdk: "src-rt-5.02axhnd.675x", ui: "tuf", skip: false } | |
- { model: "rt-ax82u", sdk: "src-rt-5.02axhnd.675x", ui: "default", skip: false } | |
- { model: "rt-ax95q", sdk: "src-rt-5.02axhnd.675x", ui: "default", skip: false } | |
- { model: "rt-axe95q", sdk: "src-rt-5.02axhnd.675x", ui: "default", skip: false } | |
- { model: "rt-ax82u_v2", sdk: "src-rt-5.04axhnd.675x", ui: "default", skip: false } | |
- { model: "rt-ax5400", sdk: "src-rt-5.04axhnd.675x", ui: "default", skip: false } | |
- { model: "tuf-ax3000_v2", sdk: "src-rt-5.04axhnd.675x", ui: "default", skip: false } | |
- { model: "tuf-ax3000_v2", sdk: "src-rt-5.04axhnd.675x", ui: "tuf", skip: false } | |
- { model: "rt-ax58u_v2", sdk: "src-rt-5.04axhnd.675x", ui: "default", skip: false } | |
if: "!contains(github.event.commits[0].message, '[SKIP_CI]')" | |
container: | |
image: gnuton/asuswrt-merlin-toolchains-docker:latest | |
env: | |
MERLINUPDATE: "y" | |
MODEL: ${{ matrix.cfg.model }} | |
SDK: ${{ matrix.cfg.sdk }} | |
UI: ${{ matrix.cfg.ui }} | |
SKIP_BUILD: ${{ matrix.cfg.skip }} | |
GIT_REPO: "https://github.com/gnuton/asuswrt-merlin.ng.git" | |
PROJECT_DIR: "/project/asuswrt-merlin.ng" | |
ARTIFACTS_DIR: "/project/artifacts" | |
CHANGELOG_FILE: "/tmp/CHANGELOG" | |
PROJECTBASEDIR: "/project" # REMOVE_ME: Fixes https://github.com/SonarSource/sonarcloud-github-action/pull/58 | |
options: --user docker | |
volumes: | |
- /mnt:/project # HACK: Use /mnt partition since bigger than others. This prevents to run out of space | |
steps: | |
- name: Run debug commands - post | |
run: | | |
cd / | |
echo "--- Disk available ----" | |
df -h | |
- name: Fix permissions in docker image | |
if: matrix.cfg.skip == false | |
run: | | |
sudo chown -R docker:docker /github/home /home/docker /project | |
- name: "Fetch code" | |
if: matrix.cfg.skip == false | |
run: | | |
cd /project | |
if [[ $GITHUB_REF_TYPE == "tag" ]]; then | |
export TAG="${GITHUB_REF#refs/tags/}" | |
echo "Fetching code from tag $TAG" | |
else | |
export BRANCH="${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" | |
echo "Fetching code from branch $BRANCH" | |
fi | |
if git clone --depth 1 --branch "${TAG:-$BRANCH}" "$GIT_REPO"; then | |
echo "Code fetched successfully." | |
else | |
echo "Failed to fetch code. Check the repository and settings." | |
exit 1 | |
fi | |
ls /home/docker | |
- name: "Set version" | |
if: matrix.cfg.skip == false | |
run: | | |
cd ${PROJECT_DIR} | |
export CIRCLE_TAG="${GITHUB_REF#refs/*/}" | |
if [[ $GITHUB_REF_TYPE == "branch" ]]; then | |
echo "Nothing to do. Not a release. Branch detected: ${CIRCLE_TAG}" | |
else | |
TAG=$(echo ${CIRCLE_TAG} | sed 's/^[^.]*\.//') | |
MAJOR_VER=$(echo "${TAG}" | sed -E 's/([0-9.]*)[_-]?(.*)/\1/') | |
MINOR_VER=$(echo "${TAG}" | sed -E 's/([0-9.]*)[_-]?(.*)/\2/') | |
sed -i "s/SERIALNO=.*/SERIALNO=${MAJOR_VER}/g" release/src-rt/version.conf | |
sed -i "s/EXTENDNO=.*/EXTENDNO=${MINOR_VER}/g" release/src-rt/version.conf | |
echo "Release detected. Updating version.conf with MAJOR_VER=${MAJOR_VER} and MINOR_VER=${MINOR_VER}" | |
fi | |
- name: Generate changelog | |
if: matrix.cfg.skip == false | |
run: | | |
cd ${PROJECT_DIR} | |
python tools/get-last-notes.py > "${CHANGELOG_FILE}" | |
cat "${CHANGELOG_FILE}" | |
- name: "Build" | |
if: matrix.cfg.skip == false | |
run: | | |
echo "----- Space available -----" | |
df -h | |
echo "----- I am: $(id) -----" | |
cd ${PROJECT_DIR}/release/${SDK} | |
echo "----- Files in dir: $(pwd) -----" | |
ls -alh | |
echo "----- Setting toolchains for ${SDK} -----" | |
if [[ ${SDK} == "src-rt-5.04axhnd.675x" ]]; then | |
source /home/docker/envs/bcm-hnd-ax-4.19.sh | |
elif [[ ${SDK} == "src-rt-5.02axhnd.675x" ]]; then | |
source /home/docker/envs/bcm-hnd.sh | |
elif [[ ${SDK} == "src-rt-5.02axhnd" ]]; then | |
source /home/docker/envs/bcm-hnd.sh | |
else | |
echo "SDK not supported" | |
exit -1 | |
fi | |
echo "----- hack-ish fix ---------" | |
sudo ln -sf /home/docker/am-toolchains/brcm-arm-hnd /opt/toolchains | |
echo "----- Check envs dir ---------" | |
ls -alh /home/docker/envs/ | |
echo "----- Debugging env vars -----" | |
env | |
echo "------ Setting UI as $UI ---------" | |
if [[ ${UI} == "tuf" ]]; then | |
echo "Enabling TUF UI" | |
sed -i 's/TUF_UI=n/TUF_UI=y/' ${PROJECT_DIR}/release/src-rt/target.mak | |
fi | |
echo "----- BUILD ${MODEL}-----" | |
make "${MODEL}" | |
# #### Just for testing #### | |
# mkdir -p "${PROJECT_DIR}/release/${SDK}/image/" | |
# echo "TEST" > "${PROJECT_DIR}/release/${SDK}/image/${MODEL}_${UI}_puresqubi.w" | |
- name: "Prepare artifacts" | |
if: matrix.cfg.skip == false | |
run: | | |
mkdir -p "${ARTIFACTS_DIR}" | |
export IMAGE_PATH=${PROJECT_DIR}/release/${SDK}/image/ | |
echo "Removing images with boot loader." | |
rm -rf ${IMAGE_PATH}/*cferom* | |
files=("${IMAGE_PATH}"/*squashfs.pkgtb "${IMAGE_PATH}"/*.w) | |
if [ ${#files[@]} -gt 0 ]; then | |
for f in "${files[@]}"; do | |
if [ -f "$f" ] && [ "${f##*.}" != "md5" ]; then | |
echo "Creating MD5 signature for $f" | |
md5sum "$f" > "$f.md5" | |
echo "Copying image $f to workspace" | |
cp "$f" "${ARTIFACTS_DIR}" | |
cp "$f.md5" "${ARTIFACTS_DIR}" | |
fi | |
done | |
else | |
echo "No *.squashfs.pkgtb or *.w files found in ${IMAGE_PATH}" | |
fi | |
# Changelogs are the same for each models since we are building from the same branch. We do use only the one generated by DSL-AX82U for now. | |
if [[ ${MODEL} == "dsl-ax82u" ]]; then | |
cp "${CHANGELOG_FILE}" "${ARTIFACTS_DIR}" | |
fi | |
- name: "Archive artifacts" | |
if: matrix.cfg.skip == false | |
uses: actions/upload-artifact@v2 | |
with: | |
name: release-${{ matrix.cfg.model }}-${{ matrix.cfg.ui }} | |
path: "/project/artifacts" | |
release-job: | |
name: Publish | |
needs: build-job | |
runs-on: ubuntu-latest | |
if: startsWith(github.event.ref, 'refs/tags/') | |
steps: | |
- name: Download packages | |
uses: actions/download-artifact@v2 | |
- name: Get release version | |
run: | | |
echo "version=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV | |
echo "prerelease=$( [[ ${GITHUB_REF#refs/*/} == *alpha* || ${GITHUB_REF#refs/*/} == *beta* ]] && echo True || echo False )" >> $GITHUB_ENV | |
- name: Publish archives and packages | |
uses: softprops/action-gh-release@v1 | |
with: | |
tag_name: ${{ env.version }} | |
body_path: /home/runner/work/asuswrt-merlin.ng/asuswrt-merlin.ng/release-dsl-ax82u-default/CHANGELOG | |
draft: true | |
prerelease: ${{ env.prerelease }} | |
files: /home/runner/work/asuswrt-merlin.ng/asuswrt-merlin.ng/release*/* | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
manifest-job: | |
name: Publish Manifest | |
needs: build-job | |
runs-on: ubuntu-latest | |
if: startsWith(github.event.ref, 'refs/tags/') && !contains(github.event.ref, 'alpha') && !contains(github.event.ref, 'beta') | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: master | |
- name: Setup git config | |
run: | | |
# setup the username and email. I tend to use 'GitHub Actions Bot' with no email by default | |
git config --global user.email "bot@gnuton.org" | |
git config --global user.name "Circle CI BOT" | |
git config --global push.default simple | |
- name: Download packages | |
uses: actions/download-artifact@v2 | |
- name: "Publish Manifest" | |
env: | |
UPDATE_DIR: "updates" | |
CHANGELOG_FILE: "release-dsl-ax82u-default/CHANGELOG" | |
run: | | |
export CIRCLE_TAG="${GITHUB_REF#refs/*/}" | |
MAJOR_VER=$(echo "${CIRCLE_TAG}" | sed -E 's/([0-9.]*)[_-]?(.*)/\1/') | |
MINOR_VER=$(echo "${CIRCLE_TAG}" | sed -E 's/([0-9.]*)[_-]?(.*)/\2/') | |
RELEASE_NOTE_FILE=$(echo "${MAJOR_VER}_${MINOR_VER}_note.txt" | sed "s/\./_/") | |
echo "Generating manifest file..." | |
echo "DSL-AX82U#FW${MAJOR_VER}#EXT${MINOR_VER}" > ${UPDATE_DIR}/manifest2.txt | |
echo "RT-AX82U#FW${MAJOR_VER}#EXT${MINOR_VER}" >> ${UPDATE_DIR}/manifest2.txt | |
echo "RT-AX82U_V2#FW${MAJOR_VER}#EXT${MINOR_VER}" >> ${UPDATE_DIR}/manifest2.txt | |
echo "RT-AX92U#FW${MAJOR_VER}#EXT${MINOR_VER}" >> ${UPDATE_DIR}/manifest2.txt | |
echo "RT-AX5400#FW${MAJOR_VER}#EXT${MINOR_VER}" >> ${UPDATE_DIR}/manifest2.txt | |
echo "TUF-AX5400#FW${MAJOR_VER}#EXT${MINOR_VER}" >> ${UPDATE_DIR}/manifest2.txt | |
echo "TUF-AX3000#FW${MAJOR_VER}#EXT${MINOR_VER}" >> ${UPDATE_DIR}/manifest2.txt | |
echo "TUF-AX3000_V2#FW${MAJOR_VER}#EXT${MINOR_VER}" >> ${UPDATE_DIR}/manifest2.txt | |
echo "RT-AX95Q#FW${MAJOR_VER}#EXT${MINOR_VER}" >> ${UPDATE_DIR}/manifest2.txt | |
echo "RT-AXE95Q#FW${MAJOR_VER}#EXT${MINOR_VER}" >> ${UPDATE_DIR}/manifest2.txt | |
echo "RT-AX58U_V2#FW${MAJOR_VER}#EXT${MINOR_VER}" >> ${UPDATE_DIR}/manifest2.txt | |
cp ${CHANGELOG_FILE} ${UPDATE_DIR}/"${RELEASE_NOTE_FILE}" | |
echo "Uploading to github manifest and ${RELEASE_NOTE_FILE}" | |
git add ${UPDATE_DIR} | |
git commit -m "Updating Notes and manifest to version:${MAJOR_VER} ${MINOR_VER} [SKIP_CI]" -a | |
git push origin |