-
Notifications
You must be signed in to change notification settings - Fork 1
137 lines (130 loc) · 3.87 KB
/
build.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
name: build
on:
push:
branches: [main]
pull_request:
branches: [main]
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
install:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js 20
uses: actions/setup-node@v2
with:
node-version: 20
- name: Cache NPM dependencies
uses: actions/cache@v3
id: cache-primes
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
- name: Install dependencies
if: steps.cache-primes.outputs.cache-hit != 'true'
run: npm install
e2e:
timeout-minutes: 60
runs-on: ubuntu-latest
needs: install
services:
s3-mock:
image: adobe/s3mock
ports:
- 9090:9090
- 9191:9191
env:
initialBuckets: test
root: s3mock
env:
DATABASE_URL: file:./test.db
SESSION_SECRET: test
DEBUG: "app:*"
S3_ENDPOINT: localhost
S3_PORT: 9090
S3_ACCESS_KEY: test
S3_SECRET_KEY: test
S3_BUCKET: test
S3_USE_SSL: false
S3_STORAGE_BASE_URL: http://localhost:9090/s3mock
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 20
- name: Cache NPM dependencies
uses: actions/cache@v3
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }} # (1)
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
run: npx playwright test
- uses: actions/upload-artifact@v3
if: always()
with:
name: playwright-report
path: playwright-report/
retention-days: 30
test:
runs-on: ubuntu-latest
needs: install
steps:
- uses: actions/checkout@v2
- name: Use Node.js 20
uses: actions/setup-node@v2
with:
node-version: 20
- name: Cache NPM dependencies
uses: actions/cache@v3
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }} # (1)
- name: Run tests
run: SESSION_KEY=$(_scripts/generate-session-key.sh) yarn test
lint:
runs-on: ubuntu-latest
needs: install
steps:
- uses: actions/checkout@v2
- name: Use Node.js 20
uses: actions/setup-node@v2
with:
node-version: 20
- name: Cache NPM dependencies
uses: actions/cache@v3
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }} # (1)
- name: Run lint
run: npm run lint
build:
runs-on: ubuntu-latest
needs: ["test", "e2e"]
if: github.ref == 'refs/heads/main'
outputs:
sha_short: ${{ steps.vars.outputs.sha_short }}
steps:
- uses: actions/checkout@v2
- name: Set outputs
id: vars
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- name: Set build_sha file
run: echo ${{ steps.vars.outputs.sha_short }} > build_sha
- name: Build the Docker image
run: docker build . --file Dockerfile --tag ghcr.io/pietvanzoen/gifable:${{ steps.vars.outputs.sha_short }}
- name: Tag latest
run: docker tag ghcr.io/pietvanzoen/gifable:${{ steps.vars.outputs.sha_short }} ghcr.io/pietvanzoen/gifable:latest
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Push the Docker image
run: |
docker push ghcr.io/pietvanzoen/gifable:${{ steps.vars.outputs.sha_short }}
docker push ghcr.io/pietvanzoen/gifable:latest