-
Notifications
You must be signed in to change notification settings - Fork 467
174 lines (154 loc) · 5.77 KB
/
Copy pathintegration-tests.yml
File metadata and controls
174 lines (154 loc) · 5.77 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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
---
name: Integration Tests
on:
pull_request:
branches: ['**']
jobs:
setup:
name: Setup
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.matrix.outputs.value }}
has-code-changes: ${{ steps.filter.outputs.code || 'true' }}
steps:
- name: Git checkout
uses: actions/checkout@v6
- name: Detect code changes
uses: dorny/paths-filter@v3
if: github.event_name == 'pull_request'
id: filter
with:
filters: |
code:
- '**'
- '!**/*.md'
- '!LICENSE'
- '!docs/**'
- '!.vale.ini'
- '!.github/ISSUE_TEMPLATE/**'
- '!.github/PULL_REQUEST_TEMPLATE.md'
- name: Compute matrix
id: matrix
env:
HEAD_REF: ${{ github.head_ref }}
run: |
node_versions=$(yq eval '.node_versions | join(" ")' .github/test-matrix.yml)
extra_oses=$(yq eval '.extra_oses_on_release | join(" ")' .github/test-matrix.yml)
primary=$(yq eval '.primary_node_version' .github/test-matrix.yml)
OS_NODE=()
for node in $node_versions; do
OS_NODE+=("ubuntu-latest:$node")
done
if [[ "$HEAD_REF" == release-please--* ]]; then
for os in $extra_oses; do
OS_NODE+=("$os:$primary")
done
fi
entries=()
for combo in "${OS_NODE[@]}"; do
os="${combo%:*}"
node="${combo##*:}"
# Resolve install version via override map; fall back to the
# display value when no override is set.
install=$(yq eval ".node_install_overrides[\"$node\"] // \"$node\"" .github/test-matrix.yml)
for shard in "1/4" "2/4" "3/4" "4/4"; do
entries+=("{\"os\":\"$os\",\"node-version\":\"$node\",\"node-install-version\":\"$install\",\"shard\":\"$shard\"}")
done
done
joined=$(IFS=,; echo "${entries[*]}")
echo "value={\"include\":[$joined]}" >> "$GITHUB_OUTPUT"
integration:
name: Integration
needs: setup
if: needs.setup.outputs.has-code-changes == 'true'
runs-on: ${{ matrix.os }}
timeout-minutes: 40
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.matrix) }}
steps:
# This improves Windows network performance, we need this since we open many ports in our tests
- name: Increase Windows port limit and reduce time wait delay
run: |
netsh int ipv4 set dynamicport tcp start=1025 num=64511
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /v TcpTimedWaitDelay /t REG_DWORD /d 30 /f
if: "${{ matrix.os == 'windows-2025' }}"
- name: Git checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Use Node.js ${{ matrix.node-install-version }}
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-install-version }}
cache: npm
check-latest: false
- name: Install PNPM
run: |
corepack enable
corepack prepare pnpm@9.14.2 --activate
- name: Setup Deno
uses: denoland/setup-deno@v1
with:
deno-version: 2.6.6
- name: Install core dependencies
run: npm ci --no-audit
- name: Build project
run: npm run build
if: '${{!steps.release-check.outputs.IS_RELEASE}}'
- name: Prepare tests
run: npm run test:init
- name: Tests
run: npm run test:integration -- --coverage --shard=${{ matrix.shard }}
env:
NETLIFY_TEST_ACCOUNT_SLUG: 'netlify-integration-testing'
# PRs from forks don't have access to this secret, which
# may be used by some tests.
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN || 'fake-token' }}
# NETLIFY_TEST_GITHUB_TOKEN is used to avoid reaching GitHub API limits in exec-fetcher.js
NETLIFY_TEST_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Changes the polling interval used by the file watcher
CHOKIDAR_INTERVAL: 20
CHOKIDAR_USEPOLLING: 1
- name: Get test coverage flags
id: test-coverage-flags
# For windows we have to use $env:
run: |-
os=${{ matrix.os }}
node=$(node --version)
echo "os=${os/-latest/}" >> $GITHUB_OUTPUT
echo "os=${os/-latest/}" >> $env:GITHUB_OUTPUT
echo "node=node_${node/.*.*/}" >> $GITHUB_OUTPUT
echo "node=node_${node/.*.*/}" >> $env:GITHUB_OUTPUT
shell: bash
- name: Sanitize shard for artefact name
id: sanitize-shard-name
run: echo "shard=$(echo '${{ matrix.shard }}' | tr '/' '-')" >> $GITHUB_OUTPUT
- name: Store npm error artefacts
uses: actions/upload-artifact@v6
if: always()
with:
name: npm-logs--${{ matrix.os }}--${{ matrix.node-version }}--${{ steps.sanitize-shard-name.outputs.shard }}
path: |
~/.npm/_logs/**/*
- uses: codecov/codecov-action@v5
continue-on-error: true
with:
flags: ${{ steps.test-coverage-flags.outputs.os }},${{ steps.test-coverage-flags.outputs.node }}
token: ${{ secrets.CODECOV_TOKEN }}
status:
name: Integration Tests Status
needs: [setup, integration]
if: always()
runs-on: ubuntu-latest
steps:
- name: Verify result
run: |
if [[ "${{ needs.setup.result }}" != "success" ]]; then
echo "Setup job failed"
exit 1
fi
if [[ "${{ needs.integration.result }}" == "failure" || "${{ needs.integration.result }}" == "cancelled" ]]; then
echo "Integration tests failed"
exit 1
fi