-
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
Showing
22 changed files
with
1,355 additions
and
1 deletion.
There are no files selected for viewing
Empty file.
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,234 @@ | ||
name: TagRelease | ||
|
||
on: | ||
workflow_dispatch: | ||
inputs: | ||
tagType: | ||
description: 'TagType' | ||
required: true | ||
default: 'pre-tag' | ||
type: choice | ||
options: | ||
- normal | ||
- pre-tag | ||
tag: | ||
description: 'Tag version number (Eg: v0.1.0)' | ||
required: true | ||
type: string | ||
message: | ||
description: 'Tag message' | ||
required: true | ||
|
||
permissions: | ||
contents: write | ||
packages: write | ||
|
||
jobs: | ||
# * Step 0: Pre-Check | ||
pre-check: | ||
runs-on: ubuntu-latest | ||
outputs: | ||
TAG_NAME: ${{ steps.set-tag.outputs.TAG_NAME }} | ||
PRERELEASE: ${{ steps.set-tag.outputs.PRERELEASE }} | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
token: ${{ secrets.CHANGELOG_PAT }} | ||
# ! TODO add check if tag format is valid (semver) | ||
- name: Check if tag is valid | ||
run : | | ||
# Check if the tag start with 'v', if not, add it | ||
if [[ ! ${{ github.event.inputs.tag }} =~ ^v.* ]]; then | ||
echo "Error tag format is invalid. The format is vx.x.x" >> "$GITHUB_OUTPUT" | ||
exit 1 | ||
fi | ||
- name: Construct Tag for Pre-Release | ||
id: set-tag | ||
run: | | ||
# Construct the tag name | ||
if [ "${{ github.event.inputs.tagType }}" == "pre-tag" ]; then | ||
echo "TAG_NAME=$(echo ${{ github.event.inputs.tag }}-alpha$(date +%Y%m%d%H%M))" >> "$GITHUB_OUTPUT" | ||
echo "PRERELEASE=true" >> "$GITHUB_OUTPUT" | ||
else | ||
echo "TAG_NAME=${{ github.event.inputs.tag }}" >> "$GITHUB_OUTPUT" | ||
fi | ||
# * Step 1: Check if everything is ok | ||
tag-already-exist: | ||
needs: [pre-check] | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
token: ${{ secrets.CHANGELOG_PAT }} | ||
- name: Check if tag not already exists | ||
run: | | ||
if git rev-parse ${{ needs.pre-check.outputs.TAG_NAME }} >/dev/null 2>&1; then | ||
echo "Tag ${{ needs.pre-check.outputs.TAG_NAME }} already exists" >> "$GITHUB_OUTPUT" | ||
exit 1 | ||
fi | ||
golangci-lint: | ||
needs: [pre-check] | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
token: ${{ secrets.CHANGELOG_PAT }} | ||
- uses: actions/setup-go@v5 | ||
with: | ||
go-version-file: 'go.mod' | ||
- run: go mod download | ||
- name: golangci-lint | ||
uses: golangci/golangci-lint-action@v3 | ||
with: | ||
version: latest | ||
# TODO add tests | ||
|
||
# * Step 2: Create a new tag | ||
tag: | ||
needs: [golangci-lint, pre-check, tag-already-exist] | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
token: ${{ secrets.CHANGELOG_PAT }} | ||
- uses: rickstaa/action-create-tag@v1 | ||
id: "tag_create" | ||
with: | ||
tag: ${{ needs.pre-check.outputs.TAG_NAME }} | ||
tag_exists_error: true | ||
message: ${{ github.event.inputs.message }} | ||
|
||
release-notes: | ||
runs-on: ubuntu-latest | ||
needs: [tag, pre-check] | ||
steps: | ||
- uses: actions/checkout@v4 # v3.5.3 | ||
with: | ||
fetch-depth: 0 | ||
ref: ${{ needs.pre-check.outputs.TAG_NAME }} | ||
- name: Generate Release Notes | ||
run: | | ||
echo "" > release-notes.txt | ||
if [ ${{ needs.pre-check.outputs.PRERELEASE }} == "true" ]; then | ||
echo "## :construction: Prerelease" >> release-notes.txt | ||
export PREV_TAG=$(git tag --list 'v*' --sort=-version:refname | grep -E "v[0-9]+\.[0-9]+\.[0-9]+$" | head -n 1) | ||
export PREV_VERSION=${PREV_TAG//v} | ||
else | ||
export PREV_TAG=$(git tag --list 'v*' --sort=-version:refname | grep -E "v[0-9]+\.[0-9]+\.[0-9]+$" | head -n 2 | tail -n 1) | ||
export PREV_VERSION=${PREV_TAG//v} | ||
fi | ||
sed -n -e "1{/# /d;}" -e "2{/^$/d;}" -e "/# $PREV_VERSION/q;p" CHANGELOG.md >> release-notes.txt | ||
- uses: actions/upload-artifact@v4 | ||
with: | ||
name: release-notes | ||
path: release-notes.txt | ||
retention-days: 1 | ||
release-app: | ||
runs-on: ubuntu-latest | ||
needs: [release-notes, golangci-lint, pre-check] | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
ref: ${{ needs.pre-check.outputs.TAG_NAME }} | ||
- name: Set up QEMU | ||
uses: docker/setup-qemu-action@v3 | ||
- name: Set up Go | ||
uses: actions/setup-go@v5 | ||
with: | ||
go-version-file: 'go.mod' | ||
- name: Login to GitHub Container Registry | ||
uses: docker/login-action@v3 | ||
with: | ||
registry: ghcr.io | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
- id: release-notes-download | ||
name: Release Notes Download | ||
uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4.1.1 | ||
with: | ||
name: release-notes | ||
path: /tmp | ||
- name: Run GoReleaser | ||
uses: goreleaser/goreleaser-action@v5 | ||
if: success() | ||
with: | ||
distribution: goreleaser | ||
version: latest | ||
args: release --clean -f .goreleaser.yaml --release-notes=${{ steps.release-notes-download.outputs.download-path }}/release-notes.txt | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
trigger-doc-update: | ||
needs: [release-app, pre-check] | ||
runs-on: ubuntu-latest | ||
if: needs.pre-check.outputs.PRERELEASE == 'false' | ||
steps: | ||
- name: Repository Dispatch | ||
uses: peter-evans/repository-dispatch@v3 | ||
with: | ||
event-type: update-doc | ||
highest-version-tag: | ||
needs: [pre-check,release-app] | ||
runs-on: ubuntu-latest | ||
if: needs.pre-check.outputs.PRERELEASE == 'false' | ||
outputs: | ||
tag: ${{ steps.highest-version-tag.outputs.tag }} | ||
steps: | ||
- uses: actions/checkout@v4 # v3.5.3 | ||
with: | ||
ref: ${{ needs.pre-check.outputs.TAG_NAME }} | ||
fetch-depth: 0 | ||
- name: Output highest version tag | ||
id: highest-version-tag | ||
run: | | ||
HIGHEST=$(git tag | sort -V | tail -1) | ||
echo "tag=$HIGHEST" >> "$GITHUB_OUTPUT" | ||
changelog-newversion: | ||
needs: [release-app, highest-version-tag, pre-check] | ||
# write new changelog header only if release tag is the $HIGHEST i.e. exists on main | ||
# and not a backport release branch (e.g. release/3.x). This results in | ||
# manually updating the CHANGELOG header if releasing from the non-default branch. | ||
# TODO: find a more deterministic way to determine release branch from tag commit | ||
if: github.ref_name == needs.highest-version-tag.outputs.tag && needs.pre-check.outputs.PRERELEASE == 'false' | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v4 # v3.5.3 | ||
with: | ||
token: ${{ secrets.CHANGELOG_PAT }} | ||
fetch-depth: 0 | ||
ref: main | ||
- name: Update Changelog Header | ||
run: | | ||
CHANGELOG_FILE_NAME="CHANGELOG.md" | ||
PREVIOUS_RELEASE_TAG=${{ github.ref_name }} | ||
# Add Release Date | ||
RELEASE_DATE=`date +%B' '%e', '%Y` | ||
sed -i -e "1 s/.*Unreleased.*/## ${PREVIOUS_RELEASE_TAG#v} ($RELEASE_DATE)/" $CHANGELOG_FILE_NAME | ||
# Prepend next release line | ||
echo Previous release is: $PREVIOUS_RELEASE_TAG | ||
NEW_RELEASE_LINE=$(echo $PREVIOUS_RELEASE_TAG | awk -F. '{ | ||
$1 = substr($1,2) | ||
$2 += 1 | ||
printf("%s.%01d.0\n\n", $1, $2); | ||
}') | ||
echo New minor version is: v$NEW_RELEASE_LINE | ||
echo -e "## $NEW_RELEASE_LINE (Unreleased)\n$(cat $CHANGELOG_FILE_NAME)" > $CHANGELOG_FILE_NAME | ||
- uses: stefanzweifel/git-auto-commit-action@v5 | ||
with: | ||
commit_message: "chore: Update CHANGELOG.md after ${{ github.ref_name }}" | ||
commit_options: '--no-verify --signoff' | ||
file_pattern: CHANGELOG.md | ||
commit_user_name: Changelog[bot] | ||
commit_user_email: changelog-bot@orange.com | ||
commit_author: Changelog Bot <changelog-bot@orange.com> | ||
|
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,34 @@ | ||
name: PR Close | ||
on: | ||
pull_request: | ||
types: [closed] | ||
workflow_dispatch: | ||
|
||
concurrency: | ||
group: ${{ github.ref }}-${{ github.head_ref }}-changelog | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
GenerateChangelog: | ||
if: github.event.pull_request.merged || github.event_name == 'workflow_dispatch' | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
token: ${{ secrets.CHANGELOG_PAT }} | ||
fetch-depth: 0 | ||
submodules: true | ||
- uses: actions/setup-go@v5 | ||
with: | ||
go-version-file: 'go.mod' | ||
# * CHANGELOG | ||
- run: go install github.com/hashicorp/go-changelog/cmd/changelog-build@latest | ||
- run: bash .github/changelog/generate-changelog.sh | ||
- uses: stefanzweifel/git-auto-commit-action@v5 | ||
with: | ||
commit_message: "chore: Update CHANGELOG.md" | ||
commit_options: '--no-verify --signoff' | ||
file_pattern: CHANGELOG.md | ||
commit_user_name: Changelog[bot] | ||
commit_user_email: changelog-bot@orange.com | ||
commit_author: Changelog Bot <changelog-bot@orange.com> |
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,85 @@ | ||
project_name: k8-env | ||
|
||
before: | ||
hooks: | ||
# You may remove this if you don't use go modules. | ||
- go mod tidy | ||
|
||
release: | ||
prerelease: auto | ||
|
||
|
||
snapshot: | ||
name_template: "{{ .Tag }}" | ||
|
||
checksum: | ||
name_template: '{{ .ProjectName }}-{{ .Version }}-checksums.txt' | ||
|
||
builds: | ||
- id: "k8-env" | ||
binary: k8-env | ||
ldflags: | ||
- '-s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}' | ||
goos: | ||
- freebsd | ||
- windows | ||
- linux | ||
- darwin | ||
goarch: | ||
- amd64 | ||
- arm | ||
- arm64 | ||
env: | ||
- CGO_ENABLED=0 | ||
|
||
dockers: | ||
- goarch: amd64 | ||
image_templates: | ||
- "ghcr.io/orange-cloudavenue/{{.ProjectName}}:v{{ .Version }}-amd64" | ||
extra_files: | ||
- ui/ | ||
dockerfile: Dockerfile | ||
use: buildx | ||
ids: | ||
- k8-env | ||
build_flag_templates: | ||
- --platform=linux/amd64 | ||
- --pull | ||
- --label=org.opencontainers.image.title={{ .ProjectName }} | ||
- --label=org.opencontainers.image.description={{ .ProjectName }} | ||
- --label=org.opencontainers.image.url=https://github.com/orange-cloudavenue/{{ .ProjectName }} | ||
- --label=org.opencontainers.image.source=https://github.com/orange-cloudavenue/{{.ProjectName}} | ||
- --label=org.opencontainers.image.version={{ .Version }} | ||
- --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} | ||
- --label=org.opencontainers.image.revision={{ .FullCommit }} | ||
|
||
- goarch: arm64 | ||
image_templates: | ||
- "ghcr.io/orange-cloudavenue/{{ .ProjectName }}:v{{ .Version }}-arm64v8" | ||
extra_files: | ||
- ui/ | ||
dockerfile: Dockerfile | ||
use: buildx | ||
ids: | ||
- golink | ||
- glctl | ||
build_flag_templates: | ||
- --platform=linux/arm64/v8 | ||
- --pull | ||
- --label=org.opencontainers.image.title={{ .ProjectName }} | ||
- --label=org.opencontainers.image.description={{ .ProjectName }} | ||
- --label=org.opencontainers.image.url=https://github.com/orange-cloudavenue/{{ .ProjectName }} | ||
- --label=org.opencontainers.image.source=https://github.com/orange-cloudavenue/{{ .ProjectName }} | ||
- --label=org.opencontainers.image.version={{ .Version }} | ||
- --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} | ||
- --label=org.opencontainers.image.revision={{ .FullCommit }} | ||
|
||
docker_manifests: | ||
- name_template: "ghcr.io/orange-cloudavenue/{{ .ProjectName }}:v{{ .Version }}" | ||
image_templates: | ||
- "ghcr.io/orange-cloudavenue/{{ .ProjectName }}:v{{ .Version }}-amd64" | ||
- "ghcr.io/orange-cloudavenue/{{ .ProjectName }}:v{{ .Version }}-arm64v8" | ||
- name_template: "ghcr.io/orange-cloudavenue/{{ .ProjectName }}:latest" | ||
image_templates: | ||
- "ghcr.io/orange-cloudavenue/{{ .ProjectName }}:v{{ .Version }}-amd64" | ||
- "ghcr.io/orange-cloudavenue/{{ .ProjectName }}:v{{ .Version }}-arm64v8" |
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,5 @@ | ||
## 0.1.0 (Unreleased) | ||
|
||
## 0.0.1 (February 12, 2024) | ||
|
||
* Init project |
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,9 @@ | ||
FROM alpine | ||
|
||
ENV GID 1000 | ||
ENV UID 1000 | ||
|
||
COPY --chown=${UID}:${GID} prestop.sh /usr/bin | ||
COPY k8-env /usr/bin | ||
|
||
ENTRYPOINT ["/usr/bin/golink"] |
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 |
---|---|---|
@@ -1,2 +1,14 @@ | ||
# k8-env | ||
A Kubernetes mutating webhook server that implements environnement variable injection | ||
|
||
A Kubernetes mutating webhook server that implements environnement variable injection. | ||
|
||
## How to use | ||
|
||
### Prerequisites | ||
|
||
- A Kubernetes cluster with the `admissionregistration.k8s.io/v1beta1` API enabled. | ||
Verify that by the following command : | ||
|
||
```bash | ||
kubectl api-versions | grep admissionregistration.k8s.io | ||
``` |
Oops, something went wrong.