Skip to content

Commit a03aea7

Browse files
authored
ci: use prebuilt images for k8s workflow (#42)
* ci: use prebuilt images for k8s workflow * ci: speed up e2e testing
1 parent e11b827 commit a03aea7

File tree

2 files changed

+223
-70
lines changed

2 files changed

+223
-70
lines changed

.github/workflows/ci.yaml

Lines changed: 93 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ jobs:
4141
kubernetes-tests:
4242
name: Kubernetes Reporter Tests
4343
runs-on: ubuntu-latest
44+
needs: docker-merge
45+
if: ${{ always() && (github.event_name != 'pull_request' || needs.docker-merge.result == 'success') }}
46+
permissions:
47+
contents: read
48+
packages: read
4449
env:
4550
SCCACHE_GHA_ENABLED: "true"
4651
RUSTC_WRAPPER: "sccache"
@@ -62,12 +67,92 @@ jobs:
6267
chmod +x /tmp/kubectl
6368
sudo mv /tmp/kubectl /usr/local/bin/kubectl
6469
fi
65-
- name: Test Kubernetes reporter with KinD
66-
run: cargo test -p amber-compiler --all-features kubernetes_smoke_config_roundtrip -- --ignored --test-threads=1
67-
- name: Test Kubernetes external slot routing with KinD
68-
run: cargo test -p amber-compiler --all-features kubernetes_smoke_external_slot_routes_to_outside_service -- --ignored --test-threads=1
69-
- name: Test Kubernetes export routing with KinD
70-
run: cargo test -p amber-compiler --all-features kubernetes_smoke_export_routes_to_host -- --ignored --test-threads=1
70+
- name: Create shared KinD cluster
71+
shell: bash
72+
run: |
73+
set -euo pipefail
74+
cluster_name="amber-ci-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}"
75+
kubeconfig="${RUNNER_TEMP}/amber-kind-kubeconfig"
76+
kind create cluster --name "$cluster_name" --kubeconfig "$kubeconfig" --wait 120s
77+
echo "AMBER_TEST_KIND_CLUSTER_NAME=${cluster_name}" >> "$GITHUB_ENV"
78+
echo "AMBER_TEST_KIND_KUBECONFIG=${kubeconfig}" >> "$GITHUB_ENV"
79+
- name: Compute image registries
80+
if: github.event_name == 'pull_request'
81+
id: registry
82+
shell: bash
83+
run: |
84+
set -euo pipefail
85+
owner_lc="$(printf '%s' '${{ github.repository_owner }}' | tr '[:upper:]' '[:lower:]')"
86+
ci_registry="ghcr.io/${owner_lc}"
87+
code_registry="$(jq -r '.registry' docker/images.json)"
88+
if [ -z "$code_registry" ] || [ "$code_registry" = "null" ]; then
89+
echo "docker/images.json registry is missing" >&2
90+
exit 1
91+
fi
92+
code_registry="${code_registry%/}"
93+
echo "CI_IMAGE_REGISTRY=${ci_registry}" >> "$GITHUB_ENV"
94+
echo "CODE_IMAGE_REGISTRY=${code_registry}" >> "$GITHUB_ENV"
95+
- name: Compute semver tag metadata
96+
if: github.event_name == 'pull_request'
97+
id: version_tags
98+
shell: bash
99+
run: |
100+
set -euo pipefail
101+
json="$(cargo run -q -p amber-images --bin version_tags -- docker/images.json)"
102+
{
103+
echo "json<<EOF"
104+
echo "$json"
105+
echo "EOF"
106+
} >> "$GITHUB_OUTPUT"
107+
- uses: docker/login-action@v3
108+
if: github.event_name == 'pull_request'
109+
with:
110+
registry: ghcr.io
111+
username: ${{ github.actor }}
112+
password: ${{ secrets.GITHUB_TOKEN }}
113+
- name: Pull and retag images for tests
114+
if: github.event_name == 'pull_request'
115+
shell: bash
116+
run: |
117+
set -euo pipefail
118+
version_tags_json='${{ steps.version_tags.outputs.json }}'
119+
while IFS= read -r spec; do
120+
[ -z "$spec" ] && continue
121+
name="$(jq -r '.name' <<< "$spec")"
122+
version="$(jq -r '.version' <<< "$spec")"
123+
runtime_tag="$(jq -r '.runtime_tag' <<< "$spec")"
124+
src="${CI_IMAGE_REGISTRY}/${name}:${GITHUB_SHA}"
125+
docker pull "$src"
126+
docker tag "$src" "${CODE_IMAGE_REGISTRY}/${name}:${version}"
127+
if [ "$runtime_tag" != "$version" ]; then
128+
docker tag "$src" "${CODE_IMAGE_REGISTRY}/${name}:${runtime_tag}"
129+
fi
130+
if [ "$name" = "amber-helper" ]; then
131+
docker tag "$src" "amber-helper:e2e"
132+
fi
133+
done < <(jq -c '.images[]' <<< "$version_tags_json")
134+
- name: Run Kubernetes smoke tests (prebuilt images)
135+
if: github.event_name == 'pull_request'
136+
env:
137+
AMBER_TEST_USE_PREBUILT_IMAGES: "1"
138+
run: |
139+
cargo test -p amber-compiler --all-features kubernetes_smoke_config_roundtrip -- --ignored --test-threads=1
140+
cargo test -p amber-compiler --all-features kubernetes_smoke_external_slot_routes_to_outside_service -- --ignored --test-threads=1
141+
cargo test -p amber-compiler --all-features kubernetes_smoke_export_routes_to_host -- --ignored --test-threads=1
142+
- name: Run Kubernetes smoke tests
143+
if: github.event_name != 'pull_request'
144+
run: |
145+
cargo test -p amber-compiler --all-features kubernetes_smoke_config_roundtrip -- --ignored --test-threads=1
146+
cargo test -p amber-compiler --all-features kubernetes_smoke_external_slot_routes_to_outside_service -- --ignored --test-threads=1
147+
cargo test -p amber-compiler --all-features kubernetes_smoke_export_routes_to_host -- --ignored --test-threads=1
148+
- name: Delete shared KinD cluster
149+
if: always()
150+
shell: bash
151+
run: |
152+
set -euo pipefail
153+
if [ -n "${AMBER_TEST_KIND_CLUSTER_NAME:-}" ]; then
154+
kind delete cluster --name "${AMBER_TEST_KIND_CLUSTER_NAME}" --kubeconfig "${AMBER_TEST_KIND_KUBECONFIG}"
155+
fi
71156
72157
image-matrix:
73158
name: Image Matrix
@@ -109,7 +194,7 @@ jobs:
109194
matrix: ${{ fromJSON(needs.image-matrix.outputs.build_matrix) }}
110195
steps:
111196
- uses: actions/checkout@v5
112-
- name: Compute image registry (lowercase owner for GHCR)
197+
- name: Compute image registry
113198
id: registry
114199
shell: bash
115200
run: |
@@ -149,7 +234,7 @@ jobs:
149234
packages: write
150235
steps:
151236
- uses: actions/checkout@v5
152-
- name: Compute image registry (lowercase owner for GHCR)
237+
- name: Compute image registry
153238
id: registry
154239
shell: bash
155240
run: |

0 commit comments

Comments
 (0)