summaryrefslogtreecommitdiff
path: root/.github/workflows
diff options
context:
space:
mode:
authorBenjamin Sherman <benjamin@holyarmy.org>2023-08-26 19:55:59 -0500
committerBenjamin Sherman <benjamin@holyarmy.org>2023-08-26 20:02:16 -0500
commit288294e0995a900ddf273fafa20cfc34d2736f6e (patch)
treec282b749dda0f0b27b210428d617653185575c83 /.github/workflows
parentf3369d582ed445405d165f84db0e5a375a169d8c (diff)
downloadAeroCore-OS-288294e0995a900ddf273fafa20cfc34d2736f6e.tar.gz
AeroCore-OS-288294e0995a900ddf273fafa20cfc34d2736f6e.zip
feat: add github actions build workflow
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/build.yml158
1 files changed, 158 insertions, 0 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000..381ec83
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,158 @@
+---
+name: build-ublue-custom
+on:
+ pull_request:
+ branches:
+ - main
+ schedule:
+ - cron: '05 10 * * *' # 10:05am UTC everyday
+ push:
+ branches:
+ - main
+ paths-ignore:
+ - '**/README.md'
+ workflow_dispatch:
+
+# The env variables starting with "ARG_" are described in the Containerfile of this repo.
+# Look there for options and explanations for their usage.
+# The values here are defaults and should be modified if using a different image, needing
+# nvidia, a specific nvidia driver, or a different Fedora version.
+env:
+ ARG_IMAGE_NAME: "silverblue"
+ ARG_IMAGE_SUFFIX: "main"
+ ARG_FEDORA_MAJOR_VERSION: "38"
+ ARG_NVIDIA_MAJOR_VERSION: ""
+ IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }}
+
+jobs:
+ push-ghcr:
+ name: Build and push image
+ runs-on: ubuntu-22.04
+
+ permissions:
+ contents: read
+ packages: write
+ id-token: write
+
+ steps:
+ # Checkout push-to-registry action GitHub repository
+ - name: Checkout Push to Registry action
+ uses: actions/checkout@v3
+
+ - name: Generate tags
+ id: generate-tags
+ shell: bash
+ run: |
+ # Generate a timestamp for creating an image version history
+ TIMESTAMP="$(date +%Y%m%d)"
+ VARIANT="${{ env.ARG_FEDORA_MAJOR_VERSION }}"
+
+ COMMIT_TAGS=()
+ BUILD_TAGS=()
+
+ # Have tags for tracking builds during pull request
+ SHA_SHORT="${GITHUB_SHA::7}"
+ COMMIT_TAGS+=("pr-${{ github.event.number }}-${VARIANT}")
+ COMMIT_TAGS+=("${SHA_SHORT}-${VARIANT}")
+
+ COMMIT_TAGS+=("pr-${{ github.event.number }}")
+ COMMIT_TAGS+=("${SHA_SHORT}")
+
+ BUILD_TAGS=("${VARIANT}")
+
+ # Append matching timestamp tags to keep a version history
+ for TAG in "${BUILD_TAGS[@]}"; do
+ BUILD_TAGS+=("${TAG}-${TIMESTAMP}")
+ done
+
+ BUILD_TAGS+=("${TIMESTAMP}")
+ BUILD_TAGS+=("latest")
+
+ if [[ "${{ github.event_name }}" == "pull_request" ]]; then
+ echo "Generated the following commit tags: "
+ for TAG in "${COMMIT_TAGS[@]}"; do
+ echo "${TAG}"
+ done
+
+ alias_tags=("${COMMIT_TAGS[@]}")
+ else
+ alias_tags=("${BUILD_TAGS[@]}")
+ fi
+
+ echo "Generated the following build tags: "
+ for TAG in "${BUILD_TAGS[@]}"; do
+ echo "${TAG}"
+ done
+
+ echo "alias_tags=${alias_tags[*]}" >> $GITHUB_OUTPUT
+
+ - name: Get current version
+ id: labels
+ run: |
+ ver=$(skopeo inspect docker://ghcr.io/ublue-os/${{ env.ARG_IMAGE_NAME }}-${{ env.ARG_IMAGE_SUFFIX }}:${{ env.FEDORA_MAJOR_VERSION}}${{ env.NVIDIA_MAJOR_VERSION}} | jq -r '.Labels["org.opencontainers.image.version"]')
+ echo "VERSION=$ver" >> $GITHUB_OUTPUT
+
+ # Build metadata
+ - name: Image Metadata
+ uses: docker/metadata-action@v4
+ id: meta
+ with:
+ images: |
+ ${{ env.ARG_IMAGE_NAME }}-${{ env.ARG_IMAGE_SUFFIX }}-custom
+
+ labels: |
+ io.artifacthub.package.readme-url=https://raw.githubusercontent.com/${{ github.repository_owner }}/${{ github.repository_name }}/main/README.md
+ org.opencontainers.image.description=Customized ${{ env.ARG_IMAGE_NAME }}-${{ env.ARG_IMAGE_SUFFIX }} image.
+ org.opencontainers.image.title=${{ env.ARG_IMAGE_NAME }}-${{ env.ARG_IMAGE_SUFFIX }}
+ org.opencontainers.image.version=${{ steps.labels.outputs.VERSION }}
+
+ # Build image using Buildah action
+ - name: Build Image
+ id: build_image
+ uses: redhat-actions/buildah-build@v2
+ with:
+ containerfiles: |
+ ./Containerfile
+ # Postfix image name with -custom to make it a little more descriptive
+ # Syntax: https://docs.github.com/en/actions/learn-github-actions/expressions#format
+ image: ${{ env.ARG_IMAGE_NAME }}-${{ env.ARG_IMAGE_SUFFIX }}-custom
+ tags: |
+ ${{ steps.generate-tags.outputs.alias_tags }}
+ build-args: |
+ IMAGE_NAME=${{ env.ARG_IMAGE_NAME }}
+ IMAGE_SUFFIX=${{ env.ARG_IMAGE_SUFFIX }}
+ FEDORA_MAJOR_VERSION=${{ env.ARG_FEDORA_MAJOR_VERSION }}
+ NVIDIA_MAJOR_VERSION=${{ env.ARG_NVIDIA_MAJOR_VERSION }}
+ labels: ${{ steps.meta.outputs.labels }}
+ oci: false
+
+ # Workaround bug where capital letters in your GitHub username make it impossible to push to GHCR.
+ # https://github.com/macbre/push-to-ghcr/issues/12
+ - name: Lowercase Registry
+ id: registry_case
+ uses: ASzc/change-string-case-action@v5
+ with:
+ string: ${{ env.IMAGE_REGISTRY }}
+
+ - name: Login to GitHub Container Registry
+ uses: docker/login-action@v2
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ # Push the image to GHCR (Image Registry)
+ - name: Push To GHCR
+ uses: redhat-actions/push-to-registry@v2
+ id: push
+ env:
+ REGISTRY_USER: ${{ github.actor }}
+ REGISTRY_PASSWORD: ${{ github.token }}
+ with:
+ image: ${{ steps.build_image.outputs.image }}
+ tags: ${{ steps.build_image.outputs.tags }}
+ registry: ${{ steps.registry_case.outputs.lowercase }}
+ username: ${{ env.REGISTRY_USER }}
+ password: ${{ env.REGISTRY_PASSWORD }}
+ extra-args: |
+ --disable-content-trust