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@v4 with: name: release-${{ matrix.cfg.model }}-${{ matrix.cfg.ui }} path: "/project/artifacts" continue-on-error: true 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 "bot@gnuton.org" git config --global user.name "Circle CI BOT" git config --global push.default simple - name: Download packages uses: actions/download-artifact@v4 - 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