-
Notifications
You must be signed in to change notification settings - Fork 0
146 lines (124 loc) · 4.34 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
138
139
140
141
142
143
144
145
146
name: Continuous Integration
on:
pull_request:
branches: [main]
types: [opened, synchronize, reopened, labeled]
push:
branches: [main]
# Make sure we're not running multiple release steps at the same time as this can give issues with determining the next npm version to release.
# Ideally we only add this to the 'release' job so it doesn't limit PR runs, but github can't guarantee the job order in that case:
# "When concurrency is specified at the job level, order is not guaranteed for jobs or runs that queue within 5 minutes of each other."
concurrency:
group: credo-ts-didcomm-${{ github.ref }}-${{ github.repository }}-${{ github.event_name }}
cancel-in-progress: true
permissions:
contents: write
pull-requests: write
jobs:
ci-trigger:
runs-on: ubuntu-20.04
outputs:
triggered: ${{ steps.check.outputs.triggered }}
steps:
- name: Determine if CI should run
id: check
run: |
if [[ "${{ github.event.action }}" == "labeled" && "${{ github.event.label.name }}" == "ci-test" ]]; then
export SHOULD_RUN='true'
elif [[ "${{ github.event.action }}" == "labeled" && "${{ github.event.label.name }}" != "ci-test" ]]; then
export SHOULD_RUN='false'
else
export SHOULD_RUN='true'
fi
echo "SHOULD_RUN: ${SHOULD_RUN}"
echo "::set-output name=triggered::${SHOULD_RUN}"
validate:
runs-on: ubuntu-20.04
name: Validate
needs: [ci-trigger]
if: needs.ci-trigger.outputs.triggered == 'true'
steps:
- name: Checkout credo-ts-didcomm-ext
uses: actions/checkout@v4
- name: Setup node v20
uses: actions/setup-node@v4
with:
node-version: 20
registry-url: 'https://registry.npmjs.org/'
cache: yarn
# Ignore scripts so we don't need libindy setup
- name: Install dependencies
run: yarn install --ignore-scripts
- name: Linting
run: yarn lint
- name: Prettier
run: yarn check-format
- name: Compile
run: yarn check-types
integration-test:
runs-on: ubuntu-20.04
name: Integration Tests
needs: [ci-trigger]
if: needs.ci-trigger.outputs.triggered == 'true'
strategy:
matrix:
node-version: [20.x]
steps:
- name: Checkout credo-ts-didcomm-ext
uses: actions/checkout@v4
- name: Setup node ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
registry-url: 'https://registry.npmjs.org/'
cache: yarn
- name: Install dependencies
run: yarn install
- name: Run tests
run: yarn test --coverage
- uses: codecov/codecov-action@v5
if: always()
release-please:
runs-on: ubuntu-latest
needs: [integration-test, validate]
outputs:
releases_created: ${{ steps.release-please.outputs.releases_created }}
paths_released: ${{ steps.release-please.outputs.paths_released }}
steps:
- uses: googleapis/release-please-action@v4
id: release-please
with:
path: ./packages
config-file: release-please-config.json
manifest-file: .release-please-manifest.json
token: ${{ secrets.GITHUB_TOKEN }}
- name: Print release outputs for debugging
continue-on-error: true
run: |
echo "Release outputs:"
echo ${{ toJson(steps.release-please.outputs) }}
# Initiate release process if release was created
release-package:
if: ${{needs.release-please.outputs.releases_created}}
runs-on: ubuntu-latest
needs: [release-please]
strategy:
fail-fast: false
matrix:
package: ${{fromJson(needs.release-please.outputs.paths_released)}}
steps:
- name: Checkout credo-ts-didcomm-ext
uses: actions/checkout@v4
- name: Setup node v20
uses: actions/setup-node@v4
with:
node-version: 20
registry-url: 'https://registry.npmjs.org/'
cache: yarn
# Ignore scripts so we don't need libindy setup
- name: Install dependencies
run: yarn install --frozen-lockfile --ignore-scripts
- name: Release to NPM
run: npm publish ./${{ matrix.package }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}