-
Notifications
You must be signed in to change notification settings - Fork 15
148 lines (131 loc) · 4 KB
/
flux-hr-image-test.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
---
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: "Flux Helm Release Image Test"
on:
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.ref }}
cancel-in-progress: true
jobs:
changed-files:
name: Get Changed Files
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.changed-files.outputs.all_changed_and_modified_files }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v45
with:
files: kubernetes/**
dir_names: true
dir_names_max_depth: 2
json: true
escape_json: false
- name: List all changed files
run: echo "${{ steps.changed-files.outputs.all_changed_and_modified_files }}"
extract-images:
name: Extract Images
runs-on: ubuntu-latest
needs:
- changed-files
if: ${{ needs.changed-files.outputs.matrix != '[]' }}
permissions:
pull-requests: read
strategy:
matrix:
paths: ${{ fromJSON(needs.changed-files.outputs.matrix) }}
max-parallel: 4
fail-fast: false
outputs:
matrix: ${{ steps.extract-images.outputs.images }}
steps:
- name: Checkout default branch
uses: actions/checkout@v4
with:
ref: "${{ github.event.repository.default_branch }}"
path: default
- name: Checkout Pull Request branch
uses: actions/checkout@v4
with:
path: pull
- name: Install Flux
uses: fluxcd/flux2/action@main
with:
version: "latest"
- name: Install yq
uses: frenck/action-setup-yq@v1
- name: Install jo
uses: awalsh128/[email protected]
with:
packages: jo
- name: Gather Images in Default Branch
uses: docker://ghcr.io/allenporter/flux-local:pr-472
with:
args: >-
get cluster
--path /github/workspace/default/${{ matrix.paths }}
--enable-images
--output yaml
--output-file default.yaml
- name: Gather Images in Pull Request Branch
uses: docker://ghcr.io/allenporter/flux-local:pr-472
with:
args: >-
get cluster
--path /github/workspace/pull/${{ matrix.paths }}
--enable-images
--output yaml
--output-file pull.yaml
- name: Filter Default Branch Results
shell: bash
run: |
yq -r '[.. | .images? | select(. != null)] | flatten | sort | unique | .[]' \
default.yaml > default.txt
- name: Filter Pull Request Branch Results
shell: bash
run: |
yq -r '[.. | .images? | select(. != null)] | flatten | sort | unique | .[]' \
pull.yaml > pull.txt
- name: Compare Default and Pull Request Images
id: extract-images
shell: bash
run: |
diff="$(grep -vf default.txt pull.txt || true)"
images=$(jo -a "${diff}")
echo "images=${images}" >> "${GITHUB_OUTPUT}"
echo "${images}"
test-images:
name: Test images from Helm Release
runs-on: ubuntu-latest
needs:
- "extract-images"
if: ${{ needs.extract-images.outputs.matrix != '[null]' }}
strategy:
matrix:
images: ${{ fromJSON(needs.extract-images.outputs.matrix) }}
max-parallel: 4
fail-fast: false
steps:
- name: Test Images from Helm Release
run: docker pull ${{ matrix.images }}
test-images-success:
needs:
- test-images
if: ${{ always() }}
name: Test images from Helm Release successful
runs-on: ubuntu-latest
steps:
- name: Check matrix status
if: >-
${{
contains(needs.*.result, 'failure')
|| contains(needs.*.result, 'cancelled')
}}
run: exit 1