Skip to content

Commit 54d4b67

Browse files
vdemeesterclaude
andcommitted
ci: add e2e tests with Kind cluster
- Migrate test TaskRuns and samples from v1beta1 to v1 - Add e2e test script that installs Tekton + task, runs all TaskRuns - E2e job depends on build (needs: [build]), runs only after build passes - Build git-init image with ko, load into Kind, override task default so tests exercise the code from the PR, not a released image - Test against all Tekton Pipelines LTS versions - Add concurrency group with cancel-in-progress - Add CI summary fan-in job for branch protection - Fix shebang from #!/usr/bin/env sh to #!/bin/sh for minimal images - Fix .ko.yaml base image override key mismatch - Use ghcr.io/tektoncd/plumbing/alpine-git-nonroot as base image (includes git, git-lfs, openssh, coreutils, nonroot user) - Update goreleaser base image to match - Add mkdir -p for user home directory (fixes #62) Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Vincent Demeester <vdemeest@redhat.com>
1 parent 0ffda8e commit 54d4b67

11 files changed

Lines changed: 194 additions & 41 deletions

.github/workflows/build.yaml

Lines changed: 82 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,103 @@ on:
44
pull_request:
55
branches: ['main']
66
push:
7-
branches: [ main ]
7+
branches: [main]
88
schedule:
99
- cron: '0 0 * * *'
1010

11-
jobs:
11+
concurrency:
12+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
13+
cancel-in-progress: true
1214

15+
jobs:
1316
build:
17+
name: Build & Test
18+
runs-on: ubuntu-latest
1419
defaults:
1520
run:
1621
working-directory: image/git-init
22+
steps:
23+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
24+
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
25+
with:
26+
go-version-file: "image/git-init/go.mod"
27+
cache-dependency-path: "image/git-init/go.sum"
28+
- run: go build ./...
29+
- run: go vet ./...
30+
- run: go test ./...
1731

18-
name: Build
32+
e2e:
33+
name: E2E (${{ matrix.pipeline-version }})
34+
needs: [build]
1935
runs-on: ubuntu-latest
20-
36+
strategy:
37+
fail-fast: false
38+
matrix:
39+
# All supported Tekton Pipelines LTS versions
40+
# Update quarterly when new LTS is released
41+
pipeline-version:
42+
- v1.12.0 # LTS, EOL 2027-05-04
43+
- v1.9.3 # LTS, EOL 2027-01-30
44+
- v1.6.2 # LTS, EOL 2026-10-31
45+
- v1.3.4 # LTS, EOL 2026-08-04
2146
steps:
2247
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
48+
2349
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
2450
with:
2551
go-version-file: "image/git-init/go.mod"
2652
cache-dependency-path: "image/git-init/go.sum"
2753

28-
# FIXME: figure out how to configure or use golangci-lint
29-
# - uses: golang/govulncheck-action@dd3ead030e4f2cf713062f7a3395191802364e13 # v1
30-
# with:
31-
# go-package: ./image/git-init/...
32-
# go-version-input: ${{ matrix.go-version }}
54+
- uses: ko-build/setup-ko@d006021bd0c28d1ce33a07e7943d48b079944c8d # v0.9
3355

34-
- run: go build ./...
35-
- run: go vet ./...
36-
- run: go test ./...
56+
- name: Create Kind cluster
57+
uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 # v1.12.0
58+
with:
59+
cluster_name: kind
60+
wait: 120s
61+
62+
- name: Build and load image into Kind
63+
env:
64+
KO_DOCKER_REPO: kind.local
65+
run: |
66+
cd image/git-init
67+
ko build --sbom=none -B -t e2e .
68+
echo "GIT_INIT_IMAGE=kind.local/git-init:e2e" >> "$GITHUB_ENV"
69+
70+
- name: Run e2e tests
71+
env:
72+
PIPELINE_VERSION: ${{ matrix.pipeline-version }}
73+
TIMEOUT: 180s
74+
run: ./test/e2e-tests.sh
75+
76+
ci-summary:
77+
name: CI summary
78+
needs: [build, e2e]
79+
runs-on: ubuntu-latest
80+
if: always()
81+
steps:
82+
- name: Check CI results
83+
run: |
84+
results=(
85+
"build=${NEEDS_BUILD_RESULT}"
86+
"e2e=${NEEDS_E2E_RESULT}"
87+
)
88+
failed=0
89+
for r in "${results[@]}"; do
90+
name="${r%%=*}"
91+
result="${r#*=}"
92+
echo "${name}: ${result}"
93+
if [ "$result" != "success" ] && [ "$result" != "skipped" ]; then
94+
failed=1
95+
fi
96+
done
97+
if [ "$failed" -eq 1 ]; then
98+
echo ""
99+
echo "Some CI jobs failed or were cancelled"
100+
exit 1
101+
fi
102+
echo ""
103+
echo "All CI checks passed"
104+
env:
105+
NEEDS_BUILD_RESULT: ${{ needs.build.result }}
106+
NEEDS_E2E_RESULT: ${{ needs.e2e.result }}

image/git-init/.goreleaser.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ kos:
2929
- id: git-init-image
3030
build: binary
3131
main: .
32-
base_image: cgr.dev/chainguard/git
32+
base_image: ghcr.io/tektoncd/plumbing/alpine-git-nonroot:latest
3333
platforms:
3434
- all
3535
tags:

image/git-init/.ko.yaml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
defaultBaseImage: cgr.dev/chainguard/static
2-
baseImageOverrides:
3-
# git-init uses a base image that includes Git, and supports running either
4-
# as root or as user nonroot with UID 65532.
5-
github.com/tektoncd-catalog/git-clone/image/git-init: cgr.dev/chainguard/git
1+
defaultBaseImage: ghcr.io/tektoncd/plumbing/alpine-git-nonroot:latest

task/git-clone/git-clone.yaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ spec:
137137
description: |
138138
Absolute path to the user's home directory.
139139
type: string
140-
default: "/home/git"
140+
default: "/tekton/home"
141141
results:
142142
- name: commit
143143
description: The precise commit SHA that was fetched by this Task.
@@ -203,13 +203,16 @@ spec:
203203
runAsNonRoot: true
204204
runAsUser: 65532
205205
script: |
206-
#!/usr/bin/env sh
206+
#!/bin/sh
207207
set -eu
208208
209209
if [ "${PARAM_VERBOSE}" = "true" ] ; then
210210
set -x
211211
fi
212212
213+
# Ensure the user home directory exists (it may not in minimal images)
214+
mkdir -p "${PARAM_USER_HOME}"
215+
213216
if [ "${WORKSPACE_BASIC_AUTH_DIRECTORY_BOUND}" = "true" ] ; then
214217
cp "${WORKSPACE_BASIC_AUTH_DIRECTORY_PATH}/.git-credentials" "${PARAM_USER_HOME}/.git-credentials"
215218
cp "${WORKSPACE_BASIC_AUTH_DIRECTORY_PATH}/.gitconfig" "${PARAM_USER_HOME}/.gitconfig"

task/git-clone/samples/git-clone-checking-out-a-branch.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
apiVersion: tekton.dev/v1beta1
1+
apiVersion: tekton.dev/v1
22
kind: Pipeline
33
metadata:
44
name: cat-branch-readme
@@ -52,7 +52,7 @@ spec:
5252
#!/usr/bin/env zsh
5353
cat $(workspaces.source.path)/README.md
5454
---
55-
apiVersion: tekton.dev/v1beta1
55+
apiVersion: tekton.dev/v1
5656
kind: PipelineRun
5757
metadata:
5858
name: git-clone-checking-out-a-branch

task/git-clone/samples/git-clone-checking-out-a-commit.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
apiVersion: tekton.dev/v1beta1
1+
apiVersion: tekton.dev/v1
22
kind: Pipeline
33
metadata:
44
name: checking-out-a-revision
@@ -88,7 +88,7 @@ spec:
8888
echo "Saw README with owner of $detectedUID as expected."
8989
fi
9090
---
91-
apiVersion: tekton.dev/v1beta1
91+
apiVersion: tekton.dev/v1
9292
kind: PipelineRun
9393
metadata:
9494
generateName: git-clone-checking-out-a-commit-

task/git-clone/samples/git-clone-for-ssl-ca.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
apiVersion: tekton.dev/v1beta1
1+
apiVersion: tekton.dev/v1
22
kind: Pipeline
33
metadata:
44
name: cat-readme
@@ -53,7 +53,7 @@ spec:
5353
#!/usr/bin/env zsh
5454
cat $(workspaces.source.path)/README.md
5555
---
56-
apiVersion: tekton.dev/v1beta1
56+
apiVersion: tekton.dev/v1
5757
kind: PipelineRun
5858
metadata:
5959
name: git-clone-checking-out-a-branch

task/git-clone/samples/git-clone-sparse-checkout.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
apiVersion: tekton.dev/v1beta1
1+
apiVersion: tekton.dev/v1
22
kind: Pipeline
33
metadata:
44
name: sparse-checkout-list-dir
@@ -53,7 +53,7 @@ spec:
5353
#!/usr/bin/env zsh
5454
ls -R $(workspaces.source.path)/
5555
---
56-
apiVersion: tekton.dev/v1beta1
56+
apiVersion: tekton.dev/v1
5757
kind: PipelineRun
5858
metadata:
5959
name: git-clone-sparse-checkout

task/git-clone/samples/using-git-clone-result.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
apiVersion: tekton.dev/v1beta1
1+
apiVersion: tekton.dev/v1
22
kind: Pipeline
33
metadata:
44
name: validate-tag-sha
@@ -59,7 +59,7 @@ spec:
5959
echo "Revision $(params.revision-name) has expected SHA $(params.expected-sha)."
6060
fi
6161
---
62-
apiVersion: tekton.dev/v1beta1
62+
apiVersion: tekton.dev/v1
6363
kind: PipelineRun
6464
metadata:
6565
generateName: using-git-clone-result-

task/git-clone/tests/run.yaml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
apiVersion: tekton.dev/v1beta1
2+
apiVersion: tekton.dev/v1
33
kind: TaskRun
44
metadata:
55
name: git-clone-run-noargs
@@ -16,7 +16,7 @@ spec:
1616
- name: url
1717
value: https://github.com/kelseyhightower/nocode
1818
---
19-
apiVersion: tekton.dev/v1beta1
19+
apiVersion: tekton.dev/v1
2020
kind: TaskRun
2121
metadata:
2222
name: git-clone-run-tag
@@ -35,7 +35,7 @@ spec:
3535
- name: revision
3636
value: 1.0.0
3737
---
38-
apiVersion: tekton.dev/v1beta1
38+
apiVersion: tekton.dev/v1
3939
kind: TaskRun
4040
metadata:
4141
name: git-clone-run-no-submodules
@@ -54,7 +54,7 @@ spec:
5454
- name: submodules
5555
value: "false"
5656
---
57-
apiVersion: tekton.dev/v1beta1
57+
apiVersion: tekton.dev/v1
5858
kind: TaskRun
5959
metadata:
6060
name: git-clone-run-submodules-with-paths
@@ -73,7 +73,7 @@ spec:
7373
- name: submodulePaths
7474
value: "js"
7575
---
76-
apiVersion: tekton.dev/v1beta1
76+
apiVersion: tekton.dev/v1
7777
kind: TaskRun
7878
metadata:
7979
name: git-clone-run-no-depth-2
@@ -92,7 +92,7 @@ spec:
9292
- name: depth
9393
value: "2"
9494
---
95-
apiVersion: tekton.dev/v1beta1
95+
apiVersion: tekton.dev/v1
9696
kind: TaskRun
9797
metadata:
9898
name: git-clone-run-sslverify-none
@@ -111,7 +111,7 @@ spec:
111111
- name: sslVerify
112112
value: "false"
113113
---
114-
apiVersion: tekton.dev/v1beta1
114+
apiVersion: tekton.dev/v1
115115
kind: TaskRun
116116
metadata:
117117
name: git-clone-run-ssl-cadirectory-empty
@@ -132,7 +132,7 @@ spec:
132132
- name: crtFileName
133133
value: ""
134134
---
135-
apiVersion: tekton.dev/v1beta1
135+
apiVersion: tekton.dev/v1
136136
kind: TaskRun
137137
metadata:
138138
name: git-clone-run-subdirectory
@@ -151,7 +151,7 @@ spec:
151151
- name: subdirectory
152152
value: "hellomoto"
153153
---
154-
apiVersion: tekton.dev/v1beta1
154+
apiVersion: tekton.dev/v1
155155
kind: TaskRun
156156
metadata:
157157
name: git-clone-run-delete-existing
@@ -170,7 +170,7 @@ spec:
170170
- name: deleteExisting
171171
value: "true"
172172
---
173-
apiVersion: tekton.dev/v1beta1
173+
apiVersion: tekton.dev/v1
174174
kind: TaskRun
175175
metadata:
176176
name: git-clone-run-without-verbose
@@ -189,7 +189,7 @@ spec:
189189
- name: verbose
190190
value: "false"
191191
---
192-
apiVersion: tekton.dev/v1beta1
192+
apiVersion: tekton.dev/v1
193193
kind: TaskRun
194194
metadata:
195195
name: git-clone-sparse

0 commit comments

Comments
 (0)