summaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
authorTulip Blossom <tulilirockz@outlook.com>2025-01-05 12:33:03 -0300
committerGitHub <noreply@github.com>2025-01-05 10:33:03 -0500
commitd251964f09d872d46313aefcdde1c2e4db0fe4fe (patch)
tree4155ea048ecdfe6cfb514f10618cd3c05bb639a1 /.github
parent87f44a23654da0e858c02cb315122e3a16a563c1 (diff)
downloadAeroCore-OS-d251964f09d872d46313aefcdde1c2e4db0fe4fe.tar.gz
AeroCore-OS-d251964f09d872d46313aefcdde1c2e4db0fe4fe.zip
feat: add artifacthub metadata by default and WIP README (#48)
Diffstat (limited to '.github')
-rw-r--r--.github/renovate.json56
-rw-r--r--.github/workflows/build.yml152
2 files changed, 70 insertions, 88 deletions
diff --git a/.github/renovate.json5 b/.github/renovate.json5
new file mode 100644
index 0000000..5db72dd
--- /dev/null
+++ b/.github/renovate.json5
@@ -0,0 +1,6 @@
+{
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
+ "extends": [
+ "config:recommended"
+ ]
+}
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index b6d3598..e4c7ea1 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,5 +1,5 @@
---
-name: build-ublue-custom
+name: Build Custom Image
on:
pull_request:
branches:
@@ -17,6 +17,7 @@ env:
MY_IMAGE_NAME: "${{ github.event.repository.name }}" # the name of the image produced by this build, matches repo names
MY_IMAGE_DESC: "My Customized Universal Blue Image"
IMAGE_REGISTRY: "ghcr.io/${{ github.repository_owner }}" # do not edit
+ ARTIFACTHUB_LOGO_URL: "https://avatars.githubusercontent.com/u/120078124?s=200&v=4" # You should put your own image here so that you get a fancy profile image on https://artifacthub.io/!
concurrency:
group: ${{ github.workflow }}-${{ github.ref || github.run_id }}-${{ inputs.brand_name}}-${{ inputs.stream_name }}
@@ -33,67 +34,52 @@ jobs:
id-token: write
steps:
- # Checkout push-to-registry action GitHub repository
- - name: Checkout Push to Registry action
- uses: actions/checkout@v4
-
- - name: Maximize build space
- uses: ublue-os/remove-unwanted-software@v7
-
- - name: Generate tags
- id: generate-tags
- shell: bash
+ # These stage versions are pinned by https://github.com/renovatebot/renovate
+ - name: Checkout
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
+
+ - name: Get current date
+ id: date
run: |
- # Generate a timestamp for creating an image version history
- TIMESTAMP="$(date +%Y%m%d)"
- COMMIT_TAGS=()
- BUILD_TAGS=()
-
- # Have tags for tracking builds during pull request
- SHA_SHORT="${GITHUB_SHA::7}"
- COMMIT_TAGS+=("pr-${{ github.event.number }}")
- COMMIT_TAGS+=("${SHA_SHORT}")
-
- # 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
-
- # Build metadata
+ # This generates a timestamp like what is defined on the ArtifactHub documentation
+ # E.G: 2022-02-08T15:38:15Z'
+ # https://artifacthub.io/docs/topics/repositories/container-images/
+ # https://linux.die.net/man/1/date
+ echo "date=$(date -u +%Y\-%m\-%d\T%H\:%M\:%S\Z)" >> $GITHUB_OUTPUT
+
+ # Image metadata for https://artifacthub.io/ - This is optional but is highly recommended so we all can get a index of all the custom images
+ # The metadata by itself is not going to do anything, you choose if you want your image to be on ArtifactHub or not.
- name: Image Metadata
- uses: docker/metadata-action@v5
- id: meta
+ uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v5
+ id: metadata
with:
- images: |
- ${{ env.MY_IMAGE_NAME }}
-
+ # This generates all the tags for your image, you can add custom tags here too!
+ # By default, it should generate "latest" and "latest.(date here)".
+ tags: |
+ type=raw,value=latest
+ type=raw,value=latest.{{date 'YYYYMMDD'}}
+ type=raw,value={{date 'YYYYMMDD'}}
+ type=sha,enable=${{ github.event_name == 'pull_request' }}
+ type=ref,event=pr
labels: |
- io.artifacthub.package.readme-url=https://raw.githubusercontent.com/${{ github.repository }}/main/README.md
- org.opencontainers.image.description=${{ env.MY_IMAGE_DESC }}
- org.opencontainers.image.title=${{ env.MY_IMAGE_NAME }}
+ io.artifacthub.package.readme-url=https://raw.githubusercontent.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}/refs/heads/main/README.md
+ org.opencontainers.image.created=${{ steps.date.outputs.date }}
+ org.opencontainers.image.description=${{ env.IMAGE_DESC }}
+ org.opencontainers.image.documentation=https://raw.githubusercontent.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}/refs/heads/main/README.md
+ org.opencontainers.image.source=https://github.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}/blob/main/Containerfile
+ org.opencontainers.image.title=${{ env.IMAGE_NAME }}
+ org.opencontainers.image.url=https://github.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}
+ org.opencontainers.image.vendor=${{ github.repository_owner }}
+ org.opencontainers.image.version=latest
+ io.artifacthub.package.deprecated=false
+ io.artifacthub.package.keywords=bootc,ublue,universal-blue
+ io.artifacthub.package.license=Apache-2.0
+ io.artifacthub.package.logo-url=${{ env.ARTIFACTHUB_LOGO_URL }}
+ io.artifacthub.package.prerelease=false
+ containers.bootc=1
+ sep-tags: " "
+ sep-annotations: " "
- # Build image using Buildah action
- name: Build Image
id: build_image
uses: redhat-actions/buildah-build@v2
@@ -102,55 +88,45 @@ jobs:
./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.MY_IMAGE_NAME }}
- tags: |
- ${{ steps.generate-tags.outputs.alias_tags }}
- labels: ${{ steps.meta.outputs.labels }}
+ image: ${{ env.IMAGE_NAME }}
+ tags: ${{ steps.metadata.outputs.tags }}
+ labels: ${{ steps.metadata.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@v6
- with:
- string: ${{ env.IMAGE_REGISTRY }}
-
+ # These `if` statements are so that pull requests for your custom images do not make it publish any packages under your name without you knowing
+ # They also check if the runner is on the default branch so that things like the merge queue (if you enable it), are going to work
- name: Login to GitHub Container Registry
- uses: docker/login-action@v3
+ uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3
+ if: github.event_name != 'pull_request' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- - name: Push Image to GHCR
- uses: redhat-actions/push-to-registry@v2
+ - name: Push To GHCR
+ uses: redhat-actions/push-to-registry@5ed88d269cf581ea9ef6dd6806d01562096bee9c # v2
+ if: github.event_name != 'pull_request' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
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: |
- --compression-format=zstd
+ registry: ${{ env.IMAGE_REGISTRY }}
+ image: ${{ env.IMAGE_NAME }}
+ tags: ${{ steps.metadata.outputs.tags }}
# This section is optional and only needs to be enabled if you plan on distributing
# your project for others to consume. You will need to create a public and private key
# using Cosign and save the private key as a repository secret in Github for this workflow
# to consume. For more details, review the image signing section of the README.
-
- # Sign container
- - uses: sigstore/cosign-installer@v3.7.0
- if: github.event_name != 'pull_request'
+ - name: Install Cosign
+ uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0
+ if: github.event_name != 'pull_request' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
- name: Sign container image
- if: github.event_name != 'pull_request'
+ if: github.event_name != 'pull_request' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
run: |
- cosign sign -y --key env://COSIGN_PRIVATE_KEY ${{ steps.registry_case.outputs.lowercase }}/${{ steps.build_image.outputs.image }}@${TAGS}
+ IMAGE_FULL="${{ env.IMAGE_REGISTRY }}/${IMAGE_NAME}"
+ for tag in ${{ steps.metadata.outputs.tags }}; do
+ cosign sign -y --key env://COSIGN_PRIVATE_KEY $IMAGE_FULL:$tag
+ done
env:
TAGS: ${{ steps.push.outputs.digest }}
COSIGN_EXPERIMENTAL: false