Build host tools #55
Workflow file for this run
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: Build host tools | |
on: | |
pull_request: | |
paths: | |
- 'tools/**' | |
- '.github/workflows/tools.yml' | |
push: | |
paths: | |
- 'tools/**' | |
- '.github/workflows/tools.yml' | |
permissions: | |
contents: read | |
jobs: | |
build-macos-latest: | |
if: github.event_name != 'push' | |
runs-on: macos-14 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: openwrt | |
- name: Setup MacOS | |
run: | | |
echo "WORKPATH=/Volumes/OpenWrt" >> "$GITHUB_ENV" | |
hdiutil create -size 20g -type SPARSE -fs "Case-sensitive HFS+" -volname OpenWrt OpenWrt.sparseimage | |
hdiutil attach OpenWrt.sparseimage | |
mv "$GITHUB_WORKSPACE/openwrt" /Volumes/OpenWrt/ | |
- name: Install required prereq on MacOS | |
working-directory: ${{ env.WORKPATH }}/openwrt | |
run: | | |
brew install \ | |
automake \ | |
coreutils \ | |
diffutils \ | |
findutils \ | |
gawk \ | |
git-extras \ | |
gnu-getopt \ | |
gnu-sed \ | |
grep \ | |
gpatch \ | |
make | |
echo "/bin" >> "$GITHUB_PATH" | |
echo "/sbin/Library/Apple/usr/bin" >> "$GITHUB_PATH" | |
echo "/usr/bin" >> "$GITHUB_PATH" | |
echo "/opt/homebrew/bin" >> "$GITHUB_PATH" | |
echo "/opt/homebrew/opt/coreutils/bin" >> "$GITHUB_PATH" | |
echo "/opt/homebrew/opt/findutils/libexec/gnubin" >> "$GITHUB_PATH" | |
echo "/opt/homebrew/opt/gnu-getopt/bin" >> "$GITHUB_PATH" | |
echo "/opt/homebrew/opt/make/libexec/gnubin" >> "$GITHUB_PATH" | |
echo "/usr/sbin" >> "$GITHUB_PATH" | |
- name: Make prereq | |
working-directory: ${{ env.WORKPATH }}/openwrt | |
run: make defconfig | |
- name: Build tools MacOS | |
working-directory: ${{ env.WORKPATH }}/openwrt | |
run: make tools/install -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh | |
- name: Upload logs | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: macos-latest-logs | |
path: ${{ env.WORKPATH }}/openwrt/logs | |
- name: Upload config | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: macos-latest-config | |
path: ${{ env.WORKPATH }}/openwrt/.config | |
build-linux-buildbot: | |
runs-on: ubuntu-latest | |
container: registry.gitlab.com/openwrt/buildbot/buildworker-3.4.1 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: 'openwrt' | |
- name: Fix permission | |
run: | | |
chown -R buildbot:buildbot openwrt | |
- name: Set configs for tools container | |
if: github.event_name == 'push' | |
shell: su buildbot -c "sh -e {0}" | |
working-directory: openwrt | |
run: | | |
touch .config | |
echo CONFIG_DEVEL=y >> .config | |
echo CONFIG_AUTOREMOVE=y >> .config | |
echo CONFIG_CCACHE=y >> .config | |
- name: Make prereq | |
shell: su buildbot -c "sh -e {0}" | |
working-directory: openwrt | |
run: make defconfig | |
- name: Build tools BuildBot Container | |
shell: su buildbot -c "sh -e {0}" | |
working-directory: openwrt | |
run: make tools/install -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh | |
- name: Upload logs | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: linux-buildbot-logs | |
path: openwrt/logs | |
- name: Upload config | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: linux-buildbot-config | |
path: openwrt/.config | |
- name: Archive prebuilt tools | |
if: github.event_name == 'push' | |
shell: su buildbot -c "sh -e {0}" | |
working-directory: openwrt | |
run: tar --mtime=now -cf tools.tar staging_dir/host build_dir/host dl | |
- name: Upload prebuilt tools | |
if: github.event_name == 'push' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: linux-buildbot-prebuilt-tools | |
path: openwrt/tools.tar | |
retention-days: 1 | |
push-tools-container: | |
needs: build-linux-buildbot | |
runs-on: ubuntu-latest | |
if: github.event_name == 'push' | |
permissions: | |
contents: read | |
packages: write | |
steps: | |
- name: Set lower case owner name | |
env: | |
OWNER: ${{ github.repository_owner }} | |
run: | | |
echo "OWNER_LC=${OWNER,,}" >> "$GITHUB_ENV" | |
# Per branch tools container tag | |
# By default stick to latest | |
# For official test targetting openwrt stable branch | |
# Get the branch or parse the tag and push dedicated tools containers | |
# Any branch that will match this pattern openwrt-[0-9][0-9].[0-9][0-9] | |
# will refresh the tools container with the matching tag. | |
# (example branch openwrt-22.03 -> tools:openwrt-22.03) | |
# (example branch openwrt-22.03-test -> tools:openwrt-22.03) | |
- name: Determine tools container tag | |
run: | | |
CONTAINER_TAG=latest | |
if [ ${{ github.ref_type }} == "branch" ]; then | |
if echo "${{ github.ref_name }}" | grep -q -E 'openwrt-[0-9][0-9]\.[0-9][0-9]'; then | |
CONTAINER_TAG="$(echo ${{ github.ref_name }} | sed 's/^\(openwrt-[0-9][0-9]\.[0-9][0-9]\).*/\1/')" | |
fi | |
elif [ ${{ github.ref_type }} == "tag" ]; then | |
if echo "${{ github.ref_name }}" | grep -q -E 'v[0-9][0-9]\.[0-9][0-9]\..+'; then | |
CONTAINER_TAG=openwrt-"$(echo ${{ github.ref_name }} | sed 's/v\([0-9][0-9]\.[0-9][0-9]\)\..\+/\1/')" | |
fi | |
fi | |
echo "Tools container to push tools:$CONTAINER_TAG" | |
echo "CONTAINER_TAG=$CONTAINER_TAG" >> "$GITHUB_ENV" | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: 'openwrt' | |
- name: Download prebuilt tools from build job | |
uses: actions/download-artifact@v3 | |
with: | |
name: linux-buildbot-prebuilt-tools | |
path: openwrt | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build and push | |
uses: docker/build-push-action@v3 | |
with: | |
context: openwrt | |
push: true | |
tags: ghcr.io/${{ env.OWNER_LC }}/tools:${{ env.CONTAINER_TAG }} | |
file: openwrt/.github/workflows/Dockerfile.tools |