-
Notifications
You must be signed in to change notification settings - Fork 1
146 lines (120 loc) · 4.44 KB
/
docker-publish.yml
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
name: Build, publish and deploy
# Run on everything. We conditionally skip deployment, but this way the build
# is only run once. Testing could be a different workflow, but then the github
# runners would need to build it twice, wasting resources.
on: [push]
env:
IMAGE_NAME: velcom-server
UID: 1004
jobs:
# Build the frontend
build-frontend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2-beta
with:
node-version: '19'
- name: "Build frontend (location independent)"
run: "./scripts/build-frontend --env production"
- name: "Upload frontend artifacts (location independent)"
uses: actions/upload-artifact@v2
with:
name: frontend-artifacts
path: frontend/dist
# Build the shared backend
build-backend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: '11'
- uses: actions/cache@v2
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: "Build backend"
run: "./scripts/build-backend"
- name: "Upload backend/backend artifact"
uses: actions/upload-artifact@v2
with:
name: backend-artifacts
path: backend/backend/target/backend.jar
- name: "Upload aspectjweaver artifact"
uses: actions/upload-artifact@v2
with:
name: aspectjweaver-artifact
path: backend/backend/target/dependency/aspectjweaver.jar
- name: "Upload backend/runner artifacts"
uses: actions/upload-artifact@v2
with:
name: backend-artifacts
path: backend/runner/target/runner.jar
# Push location independent image to GitHub Packages.
push-docker-image:
# Ensure build job passes before pushing image.
needs: [build-frontend, build-backend]
runs-on: ubuntu-latest
if: "github.event_name == 'push' && github.ref == 'refs/heads/main'"
steps:
# SETUP
- uses: actions/checkout@v2
- name: "Download frontend artifacts"
uses: actions/download-artifact@v2
with:
name: frontend-artifacts
path: dist
- name: "Download backend artifact"
uses: actions/download-artifact@v2
with:
name: backend-artifacts
- name: "Download aspectjweaver artifact"
uses: actions/download-artifact@v2
with:
name: aspectjweaver-artifact
# BUILDING
- name: "Build image"
run: "./scripts/docker/build-docker --uid $UID --metrics CI"
- name: "Log into registry"
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login docker.pkg.github.com -u ${{ github.actor }} --password-stdin
- name: Push image
run: |
IMAGE_ID=docker.pkg.github.com/${{ github.repository }}/$IMAGE_NAME
# MUST change all uppercase to lowercase for Docker
IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]')
# Offer the image as latest
docker tag $IMAGE_NAME $IMAGE_ID:latest
docker push $IMAGE_ID:latest
# Deploy master branch to speedcenter.informatik.kit.edu
deploy-kit:
# Ensure build job passes before pushing image.
needs: [push-docker-image]
runs-on: ubuntu-latest
if: "github.event_name == 'push' && github.ref == 'refs/heads/main'"
env:
ENDPOINT: ${{ secrets.KIT_DEPLOY_ENDPOINT }}
DEPLOY_SECRET: ${{ secrets.KIT_DEPLOY_SECRET }}
GITHUB_NAME: ${{ github.actor }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_RUN_ID: ${{ github.run_id }}
steps:
- uses: actions/checkout@v2
- name: "Download backend artifacts"
uses: actions/download-artifact@v2
with:
name: backend-artifacts
- name: "Call deploy script"
run: "bash scripts/deploy-kit/deploy.sh"
# Deploy main branch to velcom.aaaaaaah.de
deploy-aaaaaaah:
# Ensure build job passes before pushing image.
needs: [push-docker-image]
runs-on: ubuntu-latest
if: "github.event_name == 'push' && github.ref == 'refs/heads/main'"
steps:
- uses: actions/checkout@v2
- name: "Call deploy script"
run: 'curl -H "Authorization: Bearer ${{ secrets.AAAAAAAH_PING_TOKEN }}" ${{ secrets.AAAAAAAH_PING_ENDPOINT }} || echo "We only need the ping, not the response."'