name: Publish image on: push: paths: - 'boxes/**' workflow_dispatch: jobs: generate-matrix: name: Generate job matrices runs-on: host outputs: boxes: ${{ steps.changed-files.outputs.all_changed_files }} boxes-count: ${{ steps.changed-files.outputs.all_changed_files_count }} timestamp: ${{ steps.timestamp.outputs.timestamp }} steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: List changed files id: changed-files uses: tj-actions/changed-files@v45.0.3 with: matrix: true diff_relative: true dir_names: true dir_names_exclude_current_dir: true dir_names_max_depth: 2 files: boxes/** - name: Get timestamp id: timestamp run: | echo "timestamp=$(date +'%Y-%m-%d_%H-%M')" >> $GITHUB_OUTPUT - name: Output changes run: | echo 'Files changed: ${{ steps.changed-files.outputs.all_changed_files_count }}' echo 'List: ${{ steps.changed-files.outputs.all_changed_files }}' create-docker-images: needs: generate-matrix runs-on: host strategy: matrix: # box: ${{ needs.generate-matrix.outputs.boxes }} FIXME: this doesn't work yet in forgejo-runner box: - path: "boxes/devbox" name: "devbox" if: contains(needs.generate-matrix.outputs.boxes, matrix.box.path) steps: - name: Print variables run: | echo 'Building image in context "${{ matrix.box.path }}" as tag "${{matrix.box.name}}:${{ needs.generate-matrix.outputs.timestamp }}"' - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub uses: docker/login-action@v3 with: registry: git.alecodes.page username: ${{ vars.CONTAINER_REGISTRY_USER }} password: ${{ secrets.CONTAINER_REGISTRY_TOKEN }} - name: Build and push uses: docker/build-push-action@v6 with: platforms: linux/amd64 push: true context: "{{defaultContext}}:${{ matrix.box.path }}" tags: | git.alecodes.page/alecodes/${{ matrix.box.name }}:latest git.alecodes.page/alecodes/${{matrix.box.name}}:${{ needs.generate-matrix.outputs.timestamp }}