Skip to content

Building images 🚀 #203

Building images 🚀

Building images 🚀 #203

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 }
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@v4
- 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 "[email protected]"
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-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 "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-AX5400#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