mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-19 05:38:00 +00:00
203cc0a7ef
Github Actions cache doesn't permit to overwrite cache if it does already exist. As a trick to refresh and have fresh ccache pool, delete the ccache cache if it does exist with the help of Github REST API. An additional permission is needed to access this API. Add this permittion to each user of the build workflow. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
221 lines
7.1 KiB
YAML
221 lines
7.1 KiB
YAML
name: Build and Push prebuilt tools container
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- 'include/version.mk'
|
|
- 'tools/**'
|
|
- '.github/workflows/build-tools.yml'
|
|
- '.github/workflows/push-containers.yml'
|
|
- '.github/workflows/Dockerfile.tools'
|
|
- 'toolchain/**'
|
|
- '.github/workflows/build.yml'
|
|
- '.github/workflows/toolchain.yml'
|
|
- '.github/workflows/Dockerfile.toolchain'
|
|
branches-ignore:
|
|
- master
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
determine-container-info:
|
|
name: Determine needed info to push containers
|
|
if: ${{ github.repository_owner == 'openwrt' }}
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
owner-lc: ${{ steps.generate-owner-lc.outputs.owner-lc }}
|
|
container-tag: ${{ steps.determine-container-tag.outputs.container-tag }}
|
|
|
|
steps:
|
|
- name: Set lower case owner name
|
|
id: generate-owner-lc
|
|
env:
|
|
OWNER: ${{ github.repository_owner }}
|
|
run: |
|
|
echo "owner-lc=${OWNER,,}" >> "$GITHUB_OUTPUT"
|
|
|
|
# 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
|
|
id: determine-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 "Container tag to push for tools and toolchain is $CONTAINER_TAG"
|
|
echo "container-tag=$CONTAINER_TAG" >> "$GITHUB_OUTPUT"
|
|
|
|
build-linux-buildbot:
|
|
name: Build tools with buildbot container
|
|
if: ${{ github.repository_owner == 'openwrt' }}
|
|
uses: ./.github/workflows/build-tools.yml
|
|
with:
|
|
generate_prebuilt_artifacts: true
|
|
|
|
push-tools-container:
|
|
needs: [ determine-container-info, build-linux-buildbot ]
|
|
if: ${{ github.repository_owner == 'openwrt' }}
|
|
name: Push prebuilt tools container
|
|
runs-on: ubuntu-latest
|
|
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
steps:
|
|
- 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: Extract prebuild tools
|
|
working-directory: openwrt
|
|
run: tar -xf tools.tar
|
|
|
|
- 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/${{ needs.determine-container-info.outputs.owner-lc }}/tools:${{ needs.determine-container-info.outputs.container-tag }}
|
|
file: openwrt/.github/workflows/Dockerfile.tools
|
|
|
|
determine-targets:
|
|
name: Set targets
|
|
if: ${{ github.repository_owner == 'openwrt' }}
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
target: ${{ steps.find_targets.outputs.target }}
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Set targets
|
|
id: find_targets
|
|
run: |
|
|
export TARGETS="$(perl ./scripts/dump-target-info.pl targets 2>/dev/null \
|
|
| awk '{ print $1 }')"
|
|
|
|
JSON='['
|
|
FIRST=1
|
|
for TARGET in $TARGETS; do
|
|
TUPLE='{"target":"'"$(echo $TARGET | cut -d "/" -f 1)"'","subtarget":"'"$(echo $TARGET | cut -d "/" -f 2)"'"}'
|
|
[[ $FIRST -ne 1 ]] && JSON="$JSON"','
|
|
JSON="$JSON""$TUPLE"
|
|
FIRST=0
|
|
done
|
|
JSON="$JSON"']'
|
|
|
|
echo -e "\n---- targets ----\n"
|
|
echo "$JSON"
|
|
echo -e "\n---- targets ----\n"
|
|
|
|
echo "target=$JSON" >> $GITHUB_OUTPUT
|
|
|
|
build:
|
|
name: Build Target Toolchain
|
|
if: ${{ github.repository_owner == 'openwrt' }}
|
|
needs: [ determine-targets, push-tools-container ]
|
|
permissions:
|
|
contents: read
|
|
packages: read
|
|
actions: write
|
|
strategy:
|
|
fail-fast: False
|
|
matrix:
|
|
include: ${{fromJson(needs.determine-targets.outputs.target)}}
|
|
uses: ./.github/workflows/build.yml
|
|
with:
|
|
target: ${{ matrix.target }}
|
|
subtarget: ${{ matrix.subtarget }}
|
|
build_toolchain: true
|
|
build_external_toolchain: true
|
|
upload_external_toolchain: true
|
|
|
|
push-toolchain-container:
|
|
name: Push Target Toolchain container
|
|
if: ${{ github.repository_owner == 'openwrt' }}
|
|
needs: [ determine-container-info, determine-targets, build ]
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
fail-fast: False
|
|
matrix:
|
|
include: ${{fromJson(needs.determine-targets.outputs.target)}}
|
|
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
with:
|
|
path: 'openwrt'
|
|
|
|
- name: Download external toolchain from build job
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: ${{ matrix.target }}-${{ matrix.subtarget }}-external-toolchain
|
|
path: openwrt
|
|
|
|
- name: Find external toolchain name
|
|
id: get-toolchain-name
|
|
working-directory: openwrt
|
|
run: |
|
|
TOOLCHAIN_NAME=$(ls | grep toolchain-${{ matrix.target }}-${{ matrix.subtarget }})
|
|
echo "toolchain-name=$TOOLCHAIN_NAME" >> $GITHUB_OUTPUT
|
|
|
|
- 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/${{ needs.determine-container-info.outputs.owner-lc }}/toolchain:${{ matrix.target }}-${{ matrix.subtarget }}-${{ needs.determine-container-info.outputs.container-tag }}
|
|
file: openwrt/.github/workflows/Dockerfile.toolchain
|
|
build-args: |
|
|
OWNER_LC=${{ needs.determine-container-info.outputs.owner-lc }}
|
|
CONTAINER_TAG=${{ needs.determine-container-info.outputs.container-tag }}
|
|
TOOLCHAIN_NAME=${{ steps.get-toolchain-name.outputs.toolchain-name }}
|