Skip to content

Commit eb9aac0

Browse files
authored
ci: inject dockerfile dependency versions from workflow (#1247)
1 parent fb6380f commit eb9aac0

File tree

6 files changed

+115
-22
lines changed

6 files changed

+115
-22
lines changed

.github/workflows/acceptance-tests.yml

+21-1
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,31 @@ jobs:
1515
steps:
1616
- name: Checkout
1717
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
18+
19+
- name: "Determine dependency versions"
20+
id: "versions"
21+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
22+
with:
23+
script: |
24+
const helmRelease = await github.rest.repos.getLatestRelease({
25+
'owner': 'helm',
26+
'repo': 'helm',
27+
});
28+
core.setOutput('helm', helmRelease.data.tag_name);
29+
console.log('Helm version', helmRelease.data.tag_name);
30+
const kustomizeReleases = await github.rest.repos.listReleases({
31+
'owner': 'kubernetes-sigs',
32+
'repo': 'kustomize',
33+
});
34+
const kustomizeRelease = kustomizeReleases.data.filter(release => release.tag_name.startsWith('kustomize') && !release.draft && !release.prerelease).map(release => release.tag_name.split('/')[1])[0];
35+
console.log('Kustomize version', kustomizeRelease);
36+
core.setOutput('kustomize', kustomizeRelease);
37+
1838
- name: Call Dagger Function
1939
id: dagger
2040
uses: dagger/dagger-for-github@e5153f5610d82ac9f3f848f3a25ad9d696641068 # v7.0.1
2141
with:
2242
version: "0.14.0"
2343
verb: call
2444
dagger-flags: "--silent"
25-
args: "acceptance-tests --root-dir .:source-files --acceptance-tests-dir ./acceptance-tests"
45+
args: "acceptance-tests --root-dir .:source-files --acceptance-tests-dir ./acceptance-tests --kustomize-version ${{ steps.versions.outputs.kustomize }} --helm-version ${{ steps.versions.outputs.helm }}"

.github/workflows/docker.yml

+30
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,34 @@ env:
3131
type=semver,pattern={{version}},value=${{ inputs.tag }},enable=${{ inputs.tag != '' }}
3232
3333
jobs:
34+
determine-versions:
35+
runs-on: ubuntu-latest
36+
outputs:
37+
helm: ${{ steps.versions.outputs.helm }}
38+
kustomize: ${{ steps.versions.outputs.kustomize }}
39+
steps:
40+
- name: "Determine dependency versions"
41+
id: "versions"
42+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
43+
with:
44+
script: |
45+
const helmRelease = await github.rest.repos.getLatestRelease({
46+
'owner': 'helm',
47+
'repo': 'helm',
48+
});
49+
core.setOutput('helm', helmRelease.data.tag_name);
50+
console.log('Helm version', helmRelease.data.tag_name);
51+
const kustomizeReleases = await github.rest.repos.listReleases({
52+
'owner': 'kubernetes-sigs',
53+
'repo': 'kustomize',
54+
});
55+
const kustomizeRelease = kustomizeReleases.data.filter(release => release.tag_name.startsWith('kustomize') && !release.draft && !release.prerelease).map(release => release.tag_name.split('/')[1])[0];
56+
console.log('Kustomize version', kustomizeRelease);
57+
core.setOutput('kustomize', kustomizeRelease);
58+
3459
build:
60+
needs:
61+
- determine-versions
3562
strategy:
3663
fail-fast: false
3764
matrix:
@@ -66,6 +93,9 @@ jobs:
6693
context: .
6794
labels: ${{ steps.meta.outputs.labels }}
6895
outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=${{ github.event_name == 'push' }}
96+
build-args: |
97+
HELM_VERSION=${{ needs.determine-versions.outputs.helm }}
98+
KUSTOMIZE_VERSION=${{ needs.determine-versions.outputs.kustomize }}
6999
70100
- name: Export digest
71101
id: digest

Dockerfile

+9-8
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,25 @@ RUN apk add --no-cache git make bash &&\
1919

2020
FROM golang:1.23.3-alpine AS helm
2121
WORKDIR /tmp/helm
22+
ARG HELM_VERSION
2223
RUN apk add --no-cache jq curl
23-
RUN export TAG=$(curl --silent "https://api.github.com/repos/helm/helm/releases/latest" | jq -r .tag_name) &&\
24-
export OS=$(go env GOOS) &&\
24+
RUN export OS=$(go env GOOS) && \
2525
export ARCH=$(go env GOARCH) &&\
26-
curl -SL "https://get.helm.sh/helm-${TAG}-${OS}-${ARCH}.tar.gz" > helm.tgz && \
26+
if [[ -z ${HELM_VERSION} ]]; then export HELM_VERSION=$(curl --silent "https://api.github.com/repos/helm/helm/releases" | jq -r '.[0].tag_name'); fi && \
27+
curl -SL "https://get.helm.sh/helm-${HELM_VERSION}-${OS}-${ARCH}.tar.gz" > helm.tgz && \
2728
tar -xvf helm.tgz --strip-components=1
2829

2930
FROM golang:1.23.3-alpine AS kustomize
3031
WORKDIR /tmp/kustomize
32+
ARG KUSTOMIZE_VERSION
3133
RUN apk add --no-cache jq curl
3234
# Get the latest version of kustomize
3335
# Releases are filtered by their name since the kustomize repository exposes multiple products in the releases
34-
RUN export TAG=$(curl --silent "https://api.github.com/repos/kubernetes-sigs/kustomize/releases" | jq -r '[ .[] | select(.name | startswith("kustomize")) ] | .[0].tag_name') &&\
35-
export VERSION_TAG=${TAG#*/} &&\
36-
export OS=$(go env GOOS) &&\
36+
RUN export OS=$(go env GOOS) &&\
3737
export ARCH=$(go env GOARCH) &&\
38-
echo "https://github.com/kubernetes-sigs/kustomize/releases/download/${TAG}/kustomize_${VERSION_TAG}_${OS}_${ARCH}.tar.gz" && \
39-
curl -SL "https://github.com/kubernetes-sigs/kustomize/releases/download/${TAG}/kustomize_${VERSION_TAG}_${OS}_${ARCH}.tar.gz" > kustomize.tgz && \
38+
if [[ -z ${KUSTOMIZE_VERSION} ]]; then export KUSTOMIZE_VERSION=$(curl --silent "https://api.github.com/repos/kubernetes-sigs/kustomize/releases" | jq -r '[ .[] | select(.name | startswith("kustomize")) ] | .[0].tag_name | split("/")[1]'); fi && \
39+
echo "https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_${OS}_${ARCH}.tar.gz" && \
40+
curl -SL "https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_${OS}_${ARCH}.tar.gz" > kustomize.tgz && \
4041
tar -xvf kustomize.tgz
4142

4243
FROM golang:1.23.3 AS build

Makefile

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ BIN_DIR := $(GOPATH)/bin
55
GOX := $(BIN_DIR)/gox
66
GOLINTER := $(GOPATH)/bin/golangci-lint
77

8+
89
$(GOLINTER):
910
go install github.com/golangci/golangci-lint/cmd/[email protected]
1011

@@ -15,7 +16,7 @@ test:
1516
go test ./... -bench=. -benchmem
1617

1718
acceptance-tests:
18-
dagger call acceptance-tests --root-dir .:source-files --acceptance-tests-dir ./acceptance-tests
19+
dagger call acceptance-tests --root-dir .:source-files --acceptance-tests-dir ./acceptance-tests --kustomize-version "" --helm-version ""
1920

2021
# Compilation
2122
dev:

dagger/dagger.gen.go

+40-8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dagger/main.go

+13-4
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,18 @@ import (
1212

1313
type Tanka struct{}
1414

15-
func (m *Tanka) Build(ctx context.Context, rootDir *dagger.Directory) *dagger.Container {
15+
func (m *Tanka) Build(ctx context.Context, rootDir *dagger.Directory, helmVersion string, kustomizeVersion string) *dagger.Container {
16+
buildArgs := make([]dagger.BuildArg, 0, 2)
17+
if helmVersion != "" {
18+
buildArgs = append(buildArgs, dagger.BuildArg{Name: "HELM_VERSION", Value: helmVersion})
19+
}
20+
if kustomizeVersion != "" {
21+
buildArgs = append(buildArgs, dagger.BuildArg{Name: "KUSTOMIZE_VERSION", Value: kustomizeVersion})
22+
}
1623
return dag.Container().
17-
Build(rootDir)
24+
Build(rootDir, dagger.ContainerBuildOpts{
25+
BuildArgs: buildArgs,
26+
})
1827
}
1928

2029
func (m *Tanka) GetGoVersion(ctx context.Context, file *dagger.File) (string, error) {
@@ -33,12 +42,12 @@ func (m *Tanka) GetGoVersion(ctx context.Context, file *dagger.File) (string, er
3342
return "", fmt.Errorf("no Go version found")
3443
}
3544

36-
func (m *Tanka) AcceptanceTests(ctx context.Context, rootDir *dagger.Directory, acceptanceTestsDir *dagger.Directory) (string, error) {
45+
func (m *Tanka) AcceptanceTests(ctx context.Context, rootDir *dagger.Directory, helmVersion string, kustomizeVersion string, acceptanceTestsDir *dagger.Directory) (string, error) {
3746
goVersion, err := m.GetGoVersion(ctx, rootDir.File("go.mod"))
3847
if err != nil {
3948
return "", err
4049
}
41-
buildContainer := m.Build(ctx, rootDir)
50+
buildContainer := m.Build(ctx, rootDir, helmVersion, kustomizeVersion)
4251

4352
k3s := dag.K3S("k3sdemo")
4453
k3sSrv, err := k3s.Server().Start(ctx)

0 commit comments

Comments
 (0)