Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(Chart): 📦 add optional separated chart for CRDs #1223

Merged
merged 46 commits into from
Jan 10, 2025
Merged
Show file tree
Hide file tree
Changes from 39 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
23d4b81
feat: :package: add separated chart for CRDs
darkweaver87 Dec 16, 2024
e419cd3
fix: schemas
darkweaver87 Dec 16, 2024
bf37c5f
fix: use Files.Glob
darkweaver87 Oct 14, 2024
69ba344
fix: CI
darkweaver87 Oct 14, 2024
be6d99f
fix: update CI
darkweaver87 Oct 14, 2024
f829dd1
fix: add hub only when api management is enabled
darkweaver87 Oct 14, 2024
c490849
fix: CI
darkweaver87 Oct 14, 2024
55ba3a8
fix: snapshot dir
darkweaver87 Oct 14, 2024
7709581
fix: remove dependency while not published
darkweaver87 Dec 16, 2024
fd01dc0
fix: apply suggestions from @mloiseleur's code review
darkweaver87 Oct 18, 2024
412fa8c
fix: tag exist condition
darkweaver87 Oct 18, 2024
31eafa9
fix: charts_dir
darkweaver87 Oct 18, 2024
fb5215c
fix: changelog
darkweaver87 Oct 18, 2024
f8dce18
fix: get chart version
darkweaver87 Oct 21, 2024
5f39c43
fix: reduce changelog on patches
darkweaver87 Oct 21, 2024
a5b407a
fix: ci workflow to handle two different releases
darkweaver87 Oct 21, 2024
d0c2fc1
fix: Chart.yaml
darkweaver87 Oct 21, 2024
0ac444e
fix: more reliable changelog.sh
darkweaver87 Oct 21, 2024
4a36ec0
fix: apply suggestions from @mloiseleur's code review
darkweaver87 Oct 23, 2024
958b1e3
fix: preserve CRDs by default
darkweaver87 Oct 29, 2024
09c2420
fix: add some annotations on CRDs
darkweaver87 Oct 30, 2024
dc90364
fix: schemas and helper
darkweaver87 Oct 30, 2024
ff1c676
fix: doc
darkweaver87 Nov 4, 2024
39fc5a3
fix: CI
darkweaver87 Oct 31, 2024
2af71bc
fix: CI
darkweaver87 Nov 4, 2024
34e03a9
fix: review
darkweaver87 Nov 8, 2024
ac7881b
fix: doc
darkweaver87 Nov 8, 2024
8d81378
fix: tests + add condition
darkweaver87 Dec 16, 2024
605bf17
fix
darkweaver87 Dec 6, 2024
2a499fc
fix: doc
darkweaver87 Dec 16, 2024
1f5ddd5
fix: rename gateway api + add enabled flag
darkweaver87 Dec 16, 2024
a21dae9
fix: doc
darkweaver87 Dec 17, 2024
b280dd2
Merge branch 'master' into feat/crds
darkweaver87 Jan 6, 2025
4da2fa0
fix: remove dependency
darkweaver87 Jan 8, 2025
92157e4
fix: doc
darkweaver87 Jan 8, 2025
909a277
fix: version
darkweaver87 Jan 8, 2025
694cfd5
README review
mloiseleur Jan 8, 2025
4640d14
fix: doc
darkweaver87 Jan 10, 2025
069050a
fix: CI
darkweaver87 Jan 10, 2025
de095f0
fix: apply suggestions from @mloiseleur's code review
darkweaver87 Jan 10, 2025
b6bc446
fix: CI
darkweaver87 Jan 10, 2025
fdbf4b6
fix: apply suggestions from @mloiseleur's code review
darkweaver87 Jan 10, 2025
b99068e
fix: CI
darkweaver87 Jan 10, 2025
d686dd2
fix: doc
darkweaver87 Jan 10, 2025
71ae3a8
Merge branch 'master' into feat/crds
darkweaver87 Jan 10, 2025
afa08e7
add linter on crds consistency
mloiseleur Jan 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions .github/workflows/changelog.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"template": "## [#{{TO_TAG}}](#{{RELEASE_DIFF}}) (${DATE})\n#{{CHANGELOG}}",
"categories": [
{
"title": "## :boom: BREAKING CHANGES",
"rules": [
{
"pattern": ".*\\((${REGEXP}).*\\)!:.*",
"on_property": "title",
"flags": "gu"
}
]
},
{
"title": "## :rocket: Features",
"rules": [
{
"pattern": "feat\\((${REGEXP}).*\\):.*",
"on_property": "title",
"flags": "gu"
}
]
},
{
"title": "## :bug: Bug fixes",
"rules": [
{
"pattern": "fix\\((${REGEXP}).*\\):.*",
"on_property": "title",
"flags": "gu"
}
]
},
{
"title": "## :package: Others",
"rules": [
{
"pattern": "(chore|release)\\((${REGEXP}).*\\):.*",
"on_property": "title",
"flags": "gu"
}
]
}
],
"pr_template": "- ${{TITLE}} ##{{NUMBER}} by @#{{AUTHOR}}",
"empty_template": "- no changes",
"transformers": [
{
"pattern": "[\\-\\*] (\\[(...|TEST|CI|SKIP)\\])( )?(.+?)\n(.+?[\\-\\*] )(.+)",
"target": "- $4\n - $6"
}
]
}
161 changes: 152 additions & 9 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ on:

env:
tag_prefix: v
crds_tag_prefix: crds_v

jobs:
test:
uses: "traefik/traefik-helm-chart/.github/workflows/test.yml@master"
release:

traefik:
needs: test
runs-on: ubuntu-latest
steps:
Expand All @@ -27,31 +29,38 @@ jobs:
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
git config --global --add safe.directory /charts

- name: Copy LICENSE and README.md for packaging
- name: Copy LICENSE, EXAMPLES.md and README.md for packaging
run: |
cp ./README.md ./traefik/README.md
cp ./EXAMPLES.md ./traefik/EXAMPLES.md
cp ./LICENSE ./traefik/LICENSE

- name: Generate default static install
run: |
kustomize build traefik/crds > traefik.yaml
kustomize build traefik-crds > traefik.yaml
mloiseleur marked this conversation as resolved.
Show resolved Hide resolved
helm template traefik ./traefik -n traefik >> traefik.yaml

- name: Get chart verison
- name: Get chart version
id: chart_version
run: |
echo "CHART_VERSION=$(cat traefik/Chart.yaml | awk -F"[ ',]+" '/version:/{print $2}')" >> $GITHUB_OUTPUT
echo "CHART_VERSION=$(cat traefik/Chart.yaml | awk -F"[ ',]+" '/version:/{print $2}' | head -n 1)" >> $GITHUB_OUTPUT

- name: Check if tag exists
id: tag_exists
run: |
TAG_EXISTS=true
if ! [ $(git tag -l "${{ env.tag_prefix }}${{ steps.chart_version.outputs.CHART_VERSION }}") ]; then
TAG_EXISTS=false
TAG_EXISTS=false
if git tag -l | grep "${{ env.tag_prefix }}${{ steps.chart_version.outputs.CHART_VERSION }}" > /dev/null ; then
TAG_EXISTS=true
fi
echo TAG_EXISTS=$TAG_EXISTS >> $GITHUB_OUTPUT

- name: Get Previous tag
id: previous_tag
uses: "WyriHaximus/github-action-get-previous-tag@v1"
with:
prefix: v
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

- name: Tag release
id: tag_version
uses: mathieudutour/github-tag-action@v6.2
Expand All @@ -61,16 +70,40 @@ jobs:
tag_prefix: ${{ env.tag_prefix }}
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

- name: Render changelog configuration
env:
REGEXP: "?!crds"
run: |
export DATE=$(date +%F); cat .github/workflows/changelog.json | envsubst > /tmp/changelog.json; cat /tmp/changelog.json
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

- name: Build Changelog
id: changelog
uses: mikepenz/release-changelog-builder-action@v5
with:
fromTag: ${{ steps.previous_tag.outputs.tag }}
toTag: ${{ steps.tag_version.outputs.new_tag }}
configuration: "/tmp/changelog.json"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

- name: Create release
uses: ncipollo/release-action@v1
with:
tag: ${{ steps.tag_version.outputs.new_tag }}
name: ${{ steps.tag_version.outputs.new_tag }}
body: ${{ steps.tag_version.outputs.changelog }}
body: ${{ steps.changelog.outputs.changelog }}
prerelease: ${{ contains(steps.chart_version.outputs.CHART_VERSION, '-') }}
artifacts: "traefik.yaml"
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

# avoid to push both charts
- name: Delete traefik-crds chart
run: |
rm -rf traefik-crds
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

- name: Publish Helm chart
uses: stefanprodan/helm-gh-pages@master
with:
Expand All @@ -97,3 +130,113 @@ jobs:
registry_username: traefiker
registry_password: ${{ secrets.GHCR_TOKEN }}
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

traefik-crds:
needs: test
runs-on: ubuntu-latest
steps:

- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
git config --global --add safe.directory /charts

- name: Copy LICENSE for packaging
run: |
cp ./LICENSE ./traefik/LICENSE

- name: Get chart version
id: chart_version
run: |
echo "CHART_VERSION=$(cat traefik-crds/Chart.yaml | awk -F"[ ',]+" '/version:/{print $2}' | head -n 1)" >> $GITHUB_OUTPUT

- name: Check if tag exists
id: tag_exists
run: |
TAG_EXISTS=false
if git tag -l | grep "${{ env.crds_tag_prefix }}${{ steps.chart_version.outputs.CHART_VERSION }}" > /dev/null ; then
TAG_EXISTS=true
fi
echo TAG_EXISTS=$TAG_EXISTS >> $GITHUB_OUTPUT

- name: Get Previous tag
id: previous_tag
uses: "WyriHaximus/github-action-get-previous-tag@v1"
with:
prefix: crds_v
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

- name: Tag release
id: tag_version
uses: mathieudutour/github-tag-action@v6.2
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
custom_tag: ${{ steps.chart_version.outputs.CHART_VERSION }}
tag_prefix: ${{ env.crds_tag_prefix }}
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

- name: Render changelog configuration
env:
REGEXP: "?!crds"
run: |
export DATE=$(date +%F); cat .github/workflows/changelog.json | envsubst > /tmp/changelog.json; cat /tmp/changelog.json
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

- name: Build Changelog
id: changelog
uses: mikepenz/release-changelog-builder-action@v5
with:
fromTag: ${{ steps.previous_tag.outputs.tag }}
toTag: ${{ steps.tag_version.outputs.new_tag }}
configuration: "/tmp/changelog.json"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

- name: Create release
uses: ncipollo/release-action@v1
with:
tag: ${{ steps.tag_version.outputs.new_tag }}
name: ${{ steps.tag_version.outputs.new_tag }}
body: ${{ steps.changelog.outputs.changelog }}
prerelease: ${{ contains(steps.chart_version.outputs.CHART_VERSION, '-') }}
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

# avoid to push both charts
- name: Delete traefik chart
run: |
rm -rf traefik
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

- name: Publish Helm chart
uses: stefanprodan/helm-gh-pages@master
with:
token: ${{ secrets.CHARTS_TOKEN }}
charts_dir: .
charts_url: https://traefik.github.io/charts
owner: traefik
repository: charts
branch: master
target_dir: traefik-crds
index_dir: .
commit_username: traefiker
commit_email: 30906710+traefiker@users.noreply.github.com
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'

- name: Publish Helm chart to the ghcr.io registry
uses: appany/helm-oci-chart-releaser@v0.4.2
with:
name: traefik-crds
repository: traefik/helm
tag: ${{ steps.chart_version.outputs.CHART_VERSION }}
path: ./traefik-crds
registry: ghcr.io
registry_username: traefiker
registry_password: ${{ secrets.GHCR_TOKEN }}
if: steps.tag_exists.outputs.TAG_EXISTS == 'false'
24 changes: 22 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,26 @@ jobs:
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"

- name: Check if values schema is up-to-date
- name: Check traefik if values schema is up-to-date
uses: losisin/helm-values-schema-json-action@v1
with:
input: traefik/values.yaml
output: traefik/values.schema.json
id: "https://traefik.io/traefik-helm-chart.schema.json"
title: "Traefik Proxy Helm Chart"
description: "The Cloud Native Application Proxy"
additional-properties: true
fail-on-diff: true

- name: Check traefik-crds if values schema is up-to-date
uses: losisin/helm-values-schema-json-action@v1
with:
input: traefik-crds/values.yaml
output: traefik-crds/values.schema.json
id: "https://traefik.io/traefik-crds-helm-chart.schema.json"
title: "Traefik CRDs Helm Chart"
description: "The Cloud Native Application Proxy"
additional-properties: false
fail-on-diff: true

- name: Lint
Expand Down Expand Up @@ -71,7 +86,12 @@ jobs:
kubectl wait --namespace metallb-system --for=condition=ready pod --selector=app=metallb --timeout=90s
kubectl apply -f hack/metallb-config.yaml

- name: Check install on Kind
- name: Check install on Kind (standard)
if: steps.check.outputs.release
run: |
make test-install

- name: Check install on Kind (with CRDS)
if: steps.check.outputs.release
run: |
make test-install-with-crds
9 changes: 5 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ IMAGE_HELM_UNITTEST=docker.io/helmunittest/helm-unittest:3.16.1-0.6.1

traefik/tests/__snapshot__:
@mkdir traefik/tests/__snapshot__
@mkdir traefik-crds/tests/__snapshot__

test: traefik/tests/__snapshot__
docker run ${DOCKER_ARGS} --entrypoint /bin/sh --rm -v $(CURDIR):/charts -w /charts $(IMAGE_HELM_UNITTEST) /charts/hack/test.sh
Expand All @@ -17,14 +18,14 @@ lint:
docs:
docker run --rm -v "$(CURDIR):/helm-docs" $(IMAGE_HELM_DOCS) -o VALUES.md

test-install:
docker run ${DOCKER_ARGS} --network=host --env GIT_SAFE_DIR="true" --entrypoint /bin/sh --rm -v $(CURDIR):/charts -v $(HOME)/.kube:/root/.kube -w /charts $(IMAGE_CHART_TESTING) /charts/hack/ct.sh install

test-%:
docker run ${DOCKER_ARGS} --network=host --env GIT_SAFE_DIR="true" --entrypoint /bin/sh --rm -v $(CURDIR):/charts -v $(HOME)/.kube:/root/.kube -w /charts $(IMAGE_CHART_TESTING) /charts/hack/ct.sh $*

# Requires to install schema generation plugin beforehand
# $ helm plugin install https://github.com/losisin/helm-values-schema-json.git
schema:
helm schema
cd traefik && helm schema
cd traefik-crds && helm schema

changelog:
@echo "== Updating Changelogs..."
Expand Down
Loading
Loading