-
Notifications
You must be signed in to change notification settings - Fork 10
179 lines (154 loc) · 5.52 KB
/
e2e-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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
name: fluence build test
on:
pull_request: []
# Test on demand (dispatch) or once a week, sunday
# We combine the builds into one job to simplify not needing to share
# containers between jobs. We also don't want to push unless the tests pass.
workflow_dispatch:
schedule:
- cron: '0 0 * * 0'
jobs:
build-fluence:
# The scheduler and controller are built together with the hack script
# in the upstream scheduler-plugins
env:
container: ghcr.io/flux-framework/fluence
controller: ghcr.io/flux-framework/fluence-controller
runs-on: ubuntu-latest
name: build fluence
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: ^1.22
- name: Build Containers
run: |
make prepare
make build REGISTRY=ghcr.io/flux-framework SCHEDULER_IMAGE=fluence CONTROLLER_IMAGE=fluence-controller
- name: Save Containers
run: |
docker save ${{ env.container }} | gzip > fluence_latest.tar.gz
docker save ${{ env.controller }} | gzip > fluence_controller_latest.tar.gz
- name: Upload container artifact
uses: actions/upload-artifact@v4
with:
name: fluence
path: fluence_latest.tar.gz
- name: Upload container artifact
uses: actions/upload-artifact@v4
with:
name: fluence_controller
path: fluence_controller_latest.tar.gz
build-sidecar:
env:
container: ghcr.io/flux-framework/fluence-sidecar
runs-on: ubuntu-latest
name: build sidecar
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: ^1.22
- name: Build Container
run: |
make prepare
make build-sidecar REGISTRY=ghcr.io/flux-framework SIDECAR_IMAGE=fluence-sidecar
- name: Save Container
run: docker save ${{ env.container }} | gzip > fluence_sidecar_latest.tar.gz
- name: Upload container artifact
uses: actions/upload-artifact@v4
with:
name: fluence_sidecar
path: fluence_sidecar_latest.tar.gz
test-fluence:
needs: [build-fluence, build-sidecar]
permissions:
packages: write
env:
fluence_container: ghcr.io/flux-framework/fluence
sidecar_container: ghcr.io/flux-framework/fluence-sidecar
controller_container: ghcr.io/flux-framework/fluence-controller
runs-on: ubuntu-latest
name: test fluence
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: ^1.22
- name: Download fluence artifact
uses: actions/download-artifact@v4
with:
name: fluence
path: /tmp
- name: Download fluence_sidecar artifact
uses: actions/download-artifact@v4
with:
name: fluence_sidecar
path: /tmp
- name: Download fluence_controller artifact
uses: actions/download-artifact@v4
with:
name: fluence_controller
path: /tmp
- name: Make Space For Build
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf /opt/ghc
- name: Load Docker images
run: |
ls /tmp/*.tar.gz
docker load --input /tmp/fluence_sidecar_latest.tar.gz
rm /tmp/fluence_sidecar_latest.tar.gz
docker load --input /tmp/fluence_latest.tar.gz
rm /tmp/fluence_latest.tar.gz
docker load --input /tmp/fluence_controller_latest.tar.gz
rm /tmp/fluence_controller_latest.tar.gz
docker image ls -a | grep fluence
- name: Create Kind Cluster
uses: helm/[email protected]
with:
cluster_name: kind
kubectl_version: v1.28.2
version: v0.20.0
config: ./.github/test-kind-config.yaml
- name: Load Docker Containers into Kind
env:
fluence: ${{ env.fluence_container }}
sidecar: ${{ env.sidecar_container }}
controller: ${{ env.controller_container }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
kind load docker-image ${fluence}
kind load docker-image ${sidecar}
kind load docker-image ${controller}
- name: Install Cert Manager
run: |
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.2/cert-manager.yaml
sleep 20
- name: Test Fluence
run: /bin/bash ./.github/test.sh
- name: Tag Weekly Images
run: |
# YEAR-MONTH-DAY or #YYYY-MM-DD
tag=$(echo $(date +%Y-%m-%d))
echo "Tagging and releasing ${{ env.fluence_container}}:${tag}"
docker tag ${{ env.fluence_container }}:latest ${{ env.fluence_container }}:${tag}
echo "Tagging and releasing ${{ env.sidecar_container}}:${tag}"
docker tag ${{ env.sidecar_container }}:latest ${{ env.sidecar_container }}:${tag}
echo "Tagging and releasing ${{ env.controller_container}}:${tag}"
docker tag ${{ env.controller_container }}:latest ${{ env.controller_container }}:${tag}
# If we get here, tests pass, and we can deploy
- name: GHCR Login
if: (github.event_name != 'pull_request')
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Deploy Containers
if: (github.event_name != 'pull_request')
run: |
docker push ${{ env.fluence_container }} --all-tags
docker push ${{ env.sidecar_container }} --all-tags
docker push ${{ env.controller_container }} --all-tags