-
Notifications
You must be signed in to change notification settings - Fork 32
158 lines (145 loc) · 4.2 KB
/
ci.yaml
File metadata and controls
158 lines (145 loc) · 4.2 KB
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
name: CI
on:
push:
branches:
- develop
- release*
tags: [v*]
paths-ignore:
- README.md
- CHANGELOG.md
- LICENSE
pull_request:
# Sequence of patterns matched against refs/heads
branches:
- develop
- release*
paths-ignore:
- README.md
- CHANGELOG.md
- LICENSE
env:
project: 'focal-freedom-236620'
image: 'controller'
jobs:
Build:
runs-on: ubuntu-latest
permissions:
contents: 'read'
id-token: 'write'
packages: 'write'
name: Preflight
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm ci
- run: npm run standard
- run: |
npm i -g better-npm-audit
npx better-npm-audit audit -p
Tests:
needs: Build
runs-on: ubuntu-latest
permissions:
contents: 'read'
id-token: 'write'
packages: 'write'
issues: read
checks: write
pull-requests: write
strategy:
matrix:
node: [ 16, 17, 16, 19 ]
name: Node ${{ matrix.node }} Test
steps:
- uses: actions/checkout@v3
- name: Setup Node ${{ matrix.node }} Test
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
- name: Cache Node Modules
uses: actions/cache@v3
with:
path: |
node_modules
key: ${{ runner.os }}-controller-node_modules-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-controller-node_modules-
- run: npm ci
- run: npm run test -- junit
- run: npm run postman_test
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
files: |
*-results.xml
Publish:
needs: [Build, Tests]
runs-on: ubuntu-latest
permissions:
contents: 'read'
id-token: 'write'
packages: 'write'
name: Publish Controller
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm ci
- name: npm version
id: package-version
uses: martinbeentjes/npm-get-version-action@v1.3.1
- name: package version
shell: bash
id: version
run: |
if [[ ${{ github.ref_name }} =~ ^v.* ]] ; then
echo "pkg_version=${{ steps.package-version.outputs.current-version}}" >> "${GITHUB_OUTPUT}"
else
echo "pkg_version=${{ steps.package-version.outputs.current-version}}-${{ github.run_number }}" >> "${GITHUB_OUTPUT}"
fi
- name: npm pack with version from package version
run: |
npm --no-git-tag-version version ${{ steps.version.outputs.pkg_version }}
npm pack
- name: Login to Github Container Registry
uses: docker/login-action@v2
with:
registry: "ghcr.io"
username: ${{ github.actor }}
password: ${{ github.token }}
- name: Build and Push to ghcr
uses: docker/build-push-action@v3
id: build_push_ghcr
with:
file: Dockerfile.dev
push: true
tags: |
ghcr.io/eclipse-iofog/controller:${{ steps.version.outputs.pkg_version }}
ghcr.io/eclipse-iofog/controller:latest
build-args: PKG_VERSION=${{ steps.version.outputs.pkg_version }}
- name: Build and Push to GCR
id: build_push_gcr
uses: RafikFarhad/push-to-gcr-github-action@v5-beta
with:
gcloud_service_key: ${{ secrets.GCLOUD_SERVICE_KEY }}
registry: gcr.io
project_id: ${{ env.project }}
image_name: ${{ env.image }}
image_tag: latest,${{ steps.version.outputs.pkg_version }}
dockerfile: Dockerfile.dev
build_args: PKG_VERSION=${{ steps.version.outputs.pkg_version }}
- run: ls
- name: Publish package to packagecloud
if: ${{ steps.build_push_gcr.outcome }} == 'success'
uses: danielmundi/upload-packagecloud@v1
with:
PACKAGE-NAME: iofog-iofogcontroller-${{ steps.version.outputs.pkg_version }}.tgz
PACKAGECLOUD-USERNAME: iofog
PACKAGECLOUD-REPO: iofog-controller-snapshots
PACKAGECLOUD-DISTRIB: node
PACKAGECLOUD-TOKEN: ${{ secrets.packagecloud_token }}