From 2c7e8f4328ab17031327d74109beb8a342af3747 Mon Sep 17 00:00:00 2001
From: BuyMyMojo <hello@buymymojo.net>
Date: Fri, 20 Dec 2024 20:16:40 +1100
Subject: [PATCH] feat(Gh actions): Auto build and push docker builds to GH
 registry

This should allow me to set "releases" of the site and host those on a server instead of replying on a static built site
---
 .github/workflows/docker-image.yml | 60 ++++++++++++++++++++++++++++--
 1 file changed, 57 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml
index 5fcccc7..824b35a 100644
--- a/.github/workflows/docker-image.yml
+++ b/.github/workflows/docker-image.yml
@@ -3,16 +3,70 @@ name: Docker Image CI
 on:
   push:
     branches: [ "main" ]
+    # Publish semver tags as releases.
+    tags: [ 'v*.*.*' ]
   pull_request:
     branches: [ "main" ]
 
+
+env:
+  # Use docker.io for Docker Hub if empty
+  REGISTRY: ghcr.io
+  # github.repository as <account>/<repo>
+  IMAGE_NAME: ${{ github.repository }}
+
 jobs:
 
   build:
 
     runs-on: ubuntu-latest
+    permissions:
+      contents: read
+      packages: write
+      id-token: write
 
     steps:
-    - uses: actions/checkout@v4
-    - name: Build the Docker image
-      run: docker build . --file Dockerfile --tag aria-coffee:$(date +%s)
+    - name: Checkout repository
+      uses: actions/checkout@v4
+
+    - name: Install cosign
+      if: github.event_name != 'pull_request'
+      uses: sigstore/cosign-installer@f3c664df7af409cb4873aa5068053ba9d61a57b6 #v2.6.0
+      with:
+        cosign-release: 'v1.11.0'
+
+    - name: Setup Docker buildx
+      uses: docker/setup-buildx-action@v3
+
+    - name: Log into registry ${{ env.REGISTRY }}
+      if: github.event_name != 'pull_request'
+      uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c
+      with:
+        registry: ${{ env.REGISTRY }}
+        username: ${{ github.actor }}
+        password: ${{ secrets.GITHUB_TOKEN }}
+
+    - name: Extract Docker metadata
+      id: meta
+      uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
+      with:
+        images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
+
+    - name: Build and push Docker image
+      id: build-and-push
+      uses: docker/build-push-action@v6
+      with:
+        context: "{{defaultContext}}:src"
+        push: ${{ github.event_name != 'pull_request' }} # Don't push on PR
+        tags: ${{ steps.meta.outputs.tags }}
+        labels: ${{ steps.meta.outputs.labels }}
+        cache-from: type=gha
+        cache-to: type=gha,mode=max
+
+    - name: Sign the image with cosign
+      if: github.event_name != 'pull_request'
+      run: |
+      cosign sign --key cosign.key ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:
+
+#    - name: Build the Docker image
+#      run: docker build . --file Dockerfile --tag aria-coffee:$(date +%s)