-
Notifications
You must be signed in to change notification settings - Fork 1
137 lines (128 loc) · 4.36 KB
/
continuous-integration.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: Continuous integration
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
on:
workflow_call:
pull_request:
paths:
- '**.js'
- '**.yml'
- '**.cs'
- '**.json'
- '**.csproj'
- '**.ts'
- '**.vue'
- '**.css'
- '**.yaml'
jobs:
build-backend:
name: Build .NET solution
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/[email protected]
with:
dotnet-version: '6.0.x'
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --no-restore
build-frontend:
name: Build frontend
runs-on: ubuntu-20.04
defaults:
run:
working-directory: Epsilon.Host.Frontend
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
with:
version: 8
- uses: actions/setup-node@v4
with:
node-version: 18
cache: 'pnpm'
cache-dependency-path: 'Epsilon.Host.Frontend/pnpm-lock.yaml'
- name: Install modules
run: pnpm install
- name: Build
run: pnpm build
lint-frontend:
name: Lint and format frontend
runs-on: ubuntu-20.04
needs: [ build-frontend ]
defaults:
run:
working-directory: Epsilon.Host.Frontend
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
with:
version: 8
- uses: actions/setup-node@v4
with:
node-version: 18
cache: 'pnpm'
cache-dependency-path: 'Epsilon.Host.Frontend/pnpm-lock.yaml'
- name: Install modules
run: pnpm install
- name: Perform linter
run: pnpm run lint
- name: Perform code formatter
run: pnpm run format-code
unit-testing:
name: Unit testing
runs-on: ubuntu-20.04
needs: [ build-backend ]
steps:
- uses: actions/checkout@v4
- uses: actions/[email protected]
with:
dotnet-version: '6.0.x'
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --no-restore
- name: Test with the dotnet CLI
run: dotnet test --no-restore --verbosity normal
build-docker:
name: Build Docker
runs-on: ubuntu-20.04
needs: [ build-frontend, build-backend, lint-frontend, unit-testing ]
strategy:
fail-fast: false
matrix:
stage: [ 'development', 'staging', 'production' ]
steps:
- uses: actions/checkout@v4
- name: Create env file for ${{ matrix.stage }}
run: cp .env.example .env.${{ matrix.stage }}
- name: Build the containers
run: docker-compose -f docker-compose.${{ matrix.stage }}.yml build
code-analysis:
name: Code analysis
needs: [ build-frontend, build-backend, lint-frontend, unit-testing ]
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'csharp', 'javascript-typescript' ]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v3
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"