# Workflow name name: Build and Push Ansible Container # Run-name for each workflow run run-name: Build and Push Ansible Container on: push: branches: - main paths: - 'containers/ansible/**' - '.forgejo/workflows/ansible.yml' workflow_dispatch: {} schedule: - cron: '0 20 * * 5' # Runs every Friday at 8 PM UTC jobs: build-and-push: strategy: matrix: arch: [ amd64, arm64 ] runs-on: ${{ matrix.arch }} container: image: ghcr.io/catthehacker/ubuntu:act-22.04 steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Forgejo Container Registry uses: docker/login-action@v3 with: registry: ${{ vars.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.PACKAGE_TOKEN }} - name: Build and push (${{ matrix.arch }}) uses: docker/build-push-action@v5 with: context: ./containers/ansible/ file: ./containers/ansible/Dockerfile platforms: linux/${{ matrix.arch }} push: true tags: | ${{ secrets.CI_REGISTRY }}/${{ secrets.CI_REPOSITORY }}/ansible:${{ matrix.arch }}-latest manifest: needs: build-and-push runs-on: amd64 services: dind: image: docker:dind privileged: true env: DOCKER_HOST: tcp://dind:2375 steps: - name: Wait for Docker to start run: | i=0 while ! docker info >/dev/null 2>&1; do i=$((i+1)) if [ $i -ge 15 ]; then echo "Docker did not start within 15 seconds" exit 1 fi echo "Waiting for Docker to start..." sleep 1 done - name: Login to Forgejo Registry uses: docker/login-action@v3 with: registry: ${{ secrets.CI_REGISTRY }} username: ${{ secrets.CI_REGISTRY_USER }} password: ${{ secrets.CI_TOKEN }} - name: Create and push multi-arch manifest run: | docker manifest create ${{ secrets.CI_REGISTRY }}/${{ secrets.CI_REPOSITORY }}/ansible:latest \ --amend ${{ secrets.CI_REGISTRY }}/${{ secrets.CI_REPOSITORY }}/ansible:amd64-latest \ --amend ${{ secrets.CI_REGISTRY }}/${{ secrets.CI_REPOSITORY }}/ansible:arm64-latest docker manifest push ${{ secrets.CI_REGISTRY }}/${{ secrets.CI_REPOSITORY }}/ansible:latest