-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit c6912a4
Showing
30 changed files
with
1,727 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
.venv/ | ||
.history/ | ||
private/ | ||
*.bak |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,195 @@ | ||
name: build-docker-image-multiplatform | ||
|
||
on: | ||
push: | ||
tags: | ||
- v*.*.* | ||
|
||
workflow_dispatch: | ||
inputs: | ||
tag: | ||
description: docker-image-tag | ||
required: false | ||
type: string | ||
default: dev | ||
platforms: | ||
description: platform-filter-json | ||
required: false | ||
type: string | ||
default: |- | ||
[ "linux/amd64" ] | ||
env: | ||
REGISTRY: ghcr.io | ||
IMAGE_NAME: ${{ github.repository }} | ||
REGISTRY_IMAGE: ghcr.io/${{ github.repository }} | ||
DEFAULT_UNIVERSE: |- | ||
[ | ||
{"platform": "linux/amd64", "os": "linux", "build-os": "ubuntu-latest"}, | ||
{"platform": "linux/arm64", "os": "linux", "build-os": "ubuntu-latest"} | ||
] | ||
jobs: | ||
setup-matrix: | ||
runs-on: ubuntu-latest | ||
outputs: | ||
matrix: ${{ steps.create-matrix.outputs.matrix }} | ||
steps: | ||
- name: Determine Platforms | ||
id: create-matrix | ||
run: | | ||
platforms='${{ inputs.platforms }}' | ||
default_universe='${{ env.DEFAULT_UNIVERSE }}' | ||
echo "input filtered_platforms: $platforms" | ||
echo "input default_universe: $default_universe" | ||
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then | ||
echo "filtering matrix using workflow_dispatch arguments" | ||
result_matrix=$(echo "$default_universe" | jq -c --argjson platforms "$platforms" '[.[] | select($platforms[] == .platform)]') | ||
else | ||
echo "matrix filtering skipped" | ||
result_matrix=$(echo "$default_universe" | jq -c) | ||
fi | ||
echo set-matrix: $result_matrix | ||
echo "matrix=$result_matrix" >> $GITHUB_OUTPUT | ||
build: | ||
name: Build ${{ matrix.platform }} Image | ||
needs: setup-matrix | ||
runs-on: ${{ matrix.build-os }} | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
include: ${{ fromJson(needs.setup-matrix.outputs.matrix) }} | ||
|
||
permissions: | ||
contents: read | ||
packages: write | ||
|
||
steps: | ||
- name: Prepare | ||
run: | | ||
platform=${{ matrix.platform }} | ||
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
|
||
- name: Set up QEMU | ||
uses: docker/setup-qemu-action@v3 | ||
|
||
- name: Extract Docker metadata | ||
id: meta | ||
uses: docker/metadata-action@v5 | ||
with: | ||
images: ${{ env.REGISTRY_IMAGE }} | ||
|
||
- name: Set up Docker Buildx | ||
uses: docker/setup-buildx-action@v3 | ||
|
||
- name: Log into registry ${{ env.REGISTRY }} | ||
uses: docker/login-action@v3 | ||
with: | ||
registry: ${{ env.REGISTRY }} | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: Build and push Docker image | ||
id: build-and-push | ||
uses: docker/build-push-action@v6 | ||
with: | ||
platforms: ${{ matrix.platform }} | ||
labels: ${{ steps.meta.outputs.labels }} | ||
outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true | ||
file: docker/Dockerfile | ||
context: . | ||
provenance: false | ||
cache-from: type=gha | ||
cache-to: type=gha,mode=max | ||
|
||
- name: Export digest | ||
run: | | ||
mkdir -p /tmp/digests | ||
digest="${{ steps.build-and-push.outputs.digest }}" | ||
touch "/tmp/digests/${digest#sha256:}" | ||
- name: Upload digest | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: digests-${{ env.PLATFORM_PAIR }} | ||
path: /tmp/digests/* | ||
if-no-files-found: error | ||
retention-days: 1 | ||
|
||
merge: | ||
name: Merge platform specific Docker image into multi platform image | ||
runs-on: ubuntu-latest | ||
needs: | ||
- build | ||
|
||
permissions: | ||
contents: write | ||
packages: write | ||
|
||
steps: | ||
- name: Download digests | ||
uses: actions/download-artifact@v4 | ||
with: | ||
path: /tmp/digests | ||
pattern: digests-* | ||
merge-multiple: true | ||
|
||
- name: Set up Docker Buildx | ||
uses: docker/setup-buildx-action@v3 | ||
|
||
- name: Docker meta | ||
id: meta | ||
uses: docker/metadata-action@v5 | ||
with: | ||
images: ${{ env.REGISTRY_IMAGE }} | ||
|
||
- name: Login to Docker Hub | ||
uses: docker/login-action@v3 | ||
with: | ||
registry: ${{ env.REGISTRY }} | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: Set version or sha for Docker tag | ||
id: set-version | ||
run: | | ||
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then | ||
if [ -z "${{ github.event.inputs.tag }}" ]; then | ||
echo "tag=${GITHUB_SHA}" >> $GITHUB_ENV | ||
else | ||
echo "tag=${{ github.event.inputs.tag }}" >> $GITHUB_ENV | ||
fi | ||
else | ||
echo "tag=${{ steps.meta.outputs.version }}" >> $GITHUB_ENV | ||
fi | ||
- name: Create manifest list and push | ||
working-directory: /tmp/digests | ||
run: | | ||
docker buildx imagetools create -t ${{ env.REGISTRY_IMAGE }}:${{ env.tag }} $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *) | ||
- name: Inspect image | ||
run: | | ||
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ env.tag }} | ||
- name: Repository Dispatch | ||
uses: peter-evans/repository-dispatch@v3 | ||
if: github.event_name != 'workflow_dispatch' | ||
with: | ||
token: ${{ secrets.GITHUB_TOKEN }} | ||
event-type: build-image-success | ||
client-payload: |- | ||
{ | ||
"ref": "${{ github.ref }}", | ||
"sha": "${{ github.sha }}", | ||
"tag": "${{ env.tag }}", | ||
"artifacts": "${{ env.REGISTRY_IMAGE }}:${{ env.tag }}" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
name: build-helm-chart | ||
|
||
on: | ||
repository_dispatch: | ||
types: | ||
- build-image-success | ||
|
||
workflow_dispatch: | ||
inputs: | ||
tag: | ||
description: "chart-version" | ||
required: true | ||
type: string | ||
default: "v0.0.1" | ||
|
||
jobs: | ||
release: | ||
permissions: | ||
contents: write | ||
env: | ||
CHART_DIR: charts | ||
CHART_REPO: jr200/helm-charts | ||
CHART_REPO_BRANCH: main | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
|
||
- name: Checkout Helm chart repo | ||
uses: actions/checkout@v4 | ||
with: | ||
repository: ${{ env.CHART_REPO }} | ||
path: .helm-chart-repo | ||
# create a github fine-grained personal access token | ||
# - for repo: helm-charts | ||
# - with permissions: contents=read+write, metadata=read | ||
# then copy that token into a repository secret: CHARTS_WRITE_TOKEN | ||
token: ${{ secrets.CHARTS_WRITE_TOKEN }} | ||
|
||
- name: determine Tag | ||
id: determine-tag | ||
run: | | ||
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then | ||
echo "tag=${{ github.event.inputs.tag }}" >> $GITHUB_ENV | ||
else | ||
echo "tag=${{ github.event.client_payload.tag }}" >> $GITHUB_ENV | ||
fi | ||
- name: Install yq - portable yaml processor | ||
uses: mikefarah/[email protected] | ||
|
||
- name: Collect charts | ||
id: charts | ||
run: | | ||
set -e | ||
find -L charts -mindepth 2 -maxdepth 2 -type f \( -name 'Chart.yaml' -o -name 'Chart.yml' \) -exec dirname "{}" \; \ | ||
| sort -u \ | ||
| sed -E 's/^/- /' \ | ||
| yq --no-colors --indent 0 --output-format json '.' \ | ||
| sed -E 's/^/charts=/' >> $GITHUB_OUTPUT | ||
- name: Install chart releaser | ||
run: | | ||
set -e | ||
arch="$(dpkg --print-architecture)" | ||
curl -s https://api.github.com/repos/helm/chart-releaser/releases/latest \ | ||
| yq --indent 0 --no-colors --input-format json --unwrapScalar \ | ||
".assets[] | select(.name | test("\""^chart-releaser_.+_linux_${arch}\.tar\.gz$"\"")) | .browser_download_url" \ | ||
| xargs curl -SsL \ | ||
| tar zxf - -C /usr/local/bin | ||
- name: Install Helm | ||
uses: azure/setup-helm@v3 | ||
|
||
- name: Helm Deps | ||
run: | | ||
set -ex | ||
echo '${{ steps.charts.outputs.charts }}' \ | ||
| yq --indent 0 --no-colors --input-format json --unwrapScalar '.[]' \ | ||
| while read -r dir; do | ||
helm dependency update $dir; | ||
if [ -f "$dir/Chart.lock" ]; then | ||
yq --indent 0 \ | ||
'.dependencies | map(["helm", "repo", "add", .name, .repository] | join(" ")) | .[]' \ | ||
"$dir/Chart.lock" \ | ||
| sh --; | ||
fi | ||
done | ||
- name: Package charts | ||
id: package | ||
run: | | ||
set -ex | ||
PACKAGES=.cr-release-packages | ||
echo '${{ steps.charts.outputs.charts }}' \ | ||
| yq --indent 0 --no-colors --input-format json --unwrapScalar '.[]' \ | ||
| xargs -d$'\n' cr package --package-path "$PACKAGES" | ||
echo "dir=${PACKAGES}" >> $GITHUB_OUTPUT | ||
- name: Upload packages | ||
run: | | ||
set -ex | ||
git config --list | ||
owner=$(cut -d '/' -f 1 <<< '${{ github.repository }}') | ||
repo=$(cut -d '/' -f 2 <<< '${{ github.repository }}') | ||
cr upload --commit '${{ github.sha }}' --git-repo "$repo" --owner "$owner" --token '${{ github.token }}' \ | ||
--package-path '${{ steps.package.outputs.dir }}' --skip-existing | ||
- name: Update charts index (without --overwrite flag) | ||
working-directory: .helm-chart-repo | ||
run: | | ||
set -ex | ||
git config --local user.name "$GITHUB_ACTOR" | ||
git config --local user.email "[email protected]" | ||
git config --list | ||
mkdir -p .cr-index | ||
owner=$(cut -d '/' -f 1 <<< '${{ github.repository }}') | ||
repo=$(cut -d '/' -f 2 <<< '${{ github.repository }}') | ||
cr index --git-repo "$repo" --owner "$owner" \ | ||
--pages-branch '${{ env.CHART_REPO_BRANCH }}' \ | ||
--package-path '../${{ steps.package.outputs.dir }}' \ | ||
--index-path .cr-index \ | ||
--push | ||
- name: Repository Dispatch | ||
uses: peter-evans/repository-dispatch@v3 | ||
if: github.event_name != 'workflow_dispatch' | ||
with: | ||
token: ${{ secrets.GITHUB_TOKEN }} | ||
event-type: build-chart-success | ||
client-payload: |- | ||
{ | ||
"ref": "${{ github.ref }}", | ||
"sha": "${{ github.sha }}", | ||
"tag": "${{ env.tag }}", | ||
"artifacts": "${{ github.event.client_payload.artifacts }}" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
name: create-release | ||
|
||
on: | ||
repository_dispatch: | ||
types: | ||
- build-image-success | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
permissions: | ||
contents: write | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
|
||
- name: Create Release | ||
uses: ncipollo/release-action@v1 | ||
with: | ||
generateReleaseNotes: true | ||
allowUpdates: true | ||
tag: ${{ github.event.client_payload.tag }} | ||
# artifacts: "release-*-*/*.tar.gz" | ||
# bodyFile: release_notes/${{ env.FABRIC_VER }}.md | ||
# bodyFile: "body.md" | ||
# artifacts: '*.pdf' |
Oops, something went wrong.