Docker #140
This file contains hidden or 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: Docker | |
| on: | |
| push: | |
| branches: | |
| - '*' | |
| paths: | |
| - 'docker/**' | |
| schedule: | |
| - cron: '0 3 * * 6' | |
| workflow_dispatch: | |
| inputs: | |
| logLevel: | |
| description: 'Log level' | |
| required: true | |
| default: 'warning' | |
| type: choice | |
| options: | |
| - info | |
| - warning | |
| - debug | |
| env: | |
| GITHUB_BRANCH: ${{ github.head_ref || github.ref_name }} | |
| jobs: | |
| build: | |
| strategy: | |
| matrix: | |
| arch: [amd64, arm64] | |
| include: | |
| - arch: amd64 | |
| runner: ubuntu-latest | |
| platform: linux/amd64 | |
| - arch: arm64 | |
| runner: ubuntu-24.04-arm | |
| platform: linux/arm64 | |
| runs-on: ${{ matrix.runner }} | |
| steps: | |
| - name: Disk free | |
| run: | | |
| echo "Free disk space:" | |
| df -h | |
| - name: Free up disk space | |
| run: | | |
| sudo rm -rf /usr/share/dotnet | |
| sudo rm -rf /usr/local/lib/android | |
| sudo rm -rf /opt/ghc | |
| sudo rm -rf /usr/local/.ghcup | |
| sudo rm -rf /opt/hostedtoolcache/CodeQL | |
| - name: Disk free | |
| run: | | |
| echo "Free disk space:" | |
| df -h | |
| - uses: actions/checkout@v4 | |
| - name: Log in to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build base ${{ matrix.arch }} | |
| working-directory: ./docker/base | |
| run: | | |
| if [[ "$(uname -m)" == "aarch64" || "$(uname -m)" == "arm64" ]]; then | |
| BUILD_ARCH="arm64" | |
| elif [[ "$(uname -m)" == "x86_64" || "$(uname -m)" == "amd64" ]]; then | |
| BUILD_ARCH="amd64" | |
| else | |
| echo "Unknown architecture" | |
| exit 1 | |
| fi | |
| if [[ $GITHUB_BRANCH != "main" ]]; then | |
| export TAG_NAME=base-${BUILD_ARCH}-dev | |
| else | |
| export TAG_NAME=base-${BUILD_ARCH} | |
| fi | |
| export IMAGE_NAME=${{ secrets.DOCKER_USERNAME }}/haxtools:$TAG_NAME | |
| export MAINTAINER="infosux" | |
| export BUILD_DATE=$(date -u +"%Y-%m-%d") | |
| export BUILD_TIME=$(date -u +"%H:%M:%S UTC") | |
| export VCS_URL=$(git config --get remote.origin.url) | |
| export VCS_REF=$(git rev-parse --short HEAD) | |
| docker buildx build --provenance false --platform=${{ matrix.platform }} --build-arg TAG_NAME=$TAG_NAME --build-arg MAINTAINER --build-arg BUILD_DATE --build-arg BUILD_TIME -t $IMAGE_NAME --push . | |
| docker system prune -af | |
| - name: Disk free | |
| run: | | |
| echo "Free disk space:" | |
| df -h | |
| - name: Build cli ${{ matrix.arch }} | |
| working-directory: ./docker/cli | |
| run: | | |
| if [[ "$(uname -m)" == "aarch64" || "$(uname -m)" == "arm64" ]]; then | |
| BUILD_ARCH="arm64" | |
| elif [[ "$(uname -m)" == "x86_64" || "$(uname -m)" == "amd64" ]]; then | |
| BUILD_ARCH="amd64" | |
| else | |
| echo "Unknown architecture" | |
| exit 1 | |
| fi | |
| if [[ $GITHUB_BRANCH != "main" ]]; then | |
| export TAG_NAME=cli-${BUILD_ARCH}-dev | |
| export BASE_TAG=base-${BUILD_ARCH}-dev | |
| else | |
| export TAG_NAME=cli-${BUILD_ARCH} | |
| export BASE_TAG=base-${BUILD_ARCH} | |
| fi | |
| export IMAGE_NAME=${{ secrets.DOCKER_USERNAME }}/haxtools:$TAG_NAME | |
| export MAINTAINER="infosux" | |
| export BUILD_DATE=$(date -u +"%Y-%m-%d") | |
| export BUILD_TIME=$(date -u +"%H:%M:%S UTC") | |
| export VCS_URL=$(git config --get remote.origin.url) | |
| export VCS_REF=$(git rev-parse --short HEAD) | |
| docker buildx build --provenance false --platform=${{ matrix.platform }} --build-arg BASE_TAG=$BASE_TAG --build-arg MAINTAINER --build-arg BUILD_DATE --build-arg BUILD_TIME -t $IMAGE_NAME --push . | |
| docker system prune -af | |
| - name: Disk free | |
| run: | | |
| echo "Free disk space:" | |
| df -h | |
| - name: Build gui ${{ matrix.arch }} | |
| working-directory: ./docker/gui | |
| run: | | |
| if [[ "$(uname -m)" == "aarch64" || "$(uname -m)" == "arm64" ]]; then | |
| BUILD_ARCH="arm64" | |
| elif [[ "$(uname -m)" == "x86_64" || "$(uname -m)" == "amd64" ]]; then | |
| BUILD_ARCH="amd64" | |
| else | |
| echo "Unknown architecture" | |
| exit 1 | |
| fi | |
| if [[ $GITHUB_BRANCH != "main" ]]; then | |
| export TAG_NAME=gui-${BUILD_ARCH}-dev | |
| export BASE_TAG=cli-${BUILD_ARCH}-dev | |
| else | |
| export TAG_NAME=gui-${BUILD_ARCH} | |
| export BASE_TAG=cli-${BUILD_ARCH} | |
| fi | |
| export IMAGE_NAME=${{ secrets.DOCKER_USERNAME }}/haxtools:$TAG_NAME | |
| export MAINTAINER="infosux" | |
| export BUILD_DATE=$(date -u +"%Y-%m-%d") | |
| export BUILD_TIME=$(date -u +"%H:%M:%S UTC") | |
| export VCS_URL=$(git config --get remote.origin.url) | |
| export VCS_REF=$(git rev-parse --short HEAD) | |
| docker buildx build --provenance false --platform=${{ matrix.platform }} --build-arg BASE_TAG=$BASE_TAG --build-arg MAINTAINER --build-arg BUILD_DATE --build-arg BUILD_TIME -t $IMAGE_NAME --push . | |
| docker system prune -af | |
| - name: Disk free | |
| run: | | |
| echo "Free disk space:" | |
| df -h | |
| create-manifests: | |
| needs: build | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| image: [base, cli, gui] | |
| steps: | |
| - name: Log in to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Create and Push haxtools:${{ matrix.image }} | |
| run: | | |
| if [[ $GITHUB_BRANCH != "main" ]]; then | |
| export BRANCH_SUFFIX="-dev" | |
| fi | |
| AMD64_DIGEST=$(docker buildx imagetools inspect ${{ secrets.DOCKER_USERNAME }}/haxtools:${{ matrix.image }}-amd64${BRANCH_SUFFIX} --format '{{json .Manifest}}' | jq -r '.digest') | |
| ARM64_DIGEST=$(docker buildx imagetools inspect ${{ secrets.DOCKER_USERNAME }}/haxtools:${{ matrix.image }}-arm64${BRANCH_SUFFIX} --format '{{json .Manifest}}' | jq -r '.digest') | |
| docker manifest create ${{ secrets.DOCKER_USERNAME }}/haxtools:${{ matrix.image }}${BRANCH_SUFFIX} \ | |
| ${{ secrets.DOCKER_USERNAME }}/haxtools:${{ matrix.image }}-amd64${BRANCH_SUFFIX}@$AMD64_DIGEST \ | |
| ${{ secrets.DOCKER_USERNAME }}/haxtools:${{ matrix.image }}-arm64${BRANCH_SUFFIX}@$ARM64_DIGEST | |
| docker manifest push ${{ secrets.DOCKER_USERNAME }}/haxtools:${{ matrix.image }}${BRANCH_SUFFIX} |