Repository navigation
132 lines (121 loc) · 5.59 KB
/
Copy pathtests.yml
File metadata and controls
132 lines (121 loc) · 5.59 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
name: Tests
on:
pull_request:
push:
branches: [main]
workflow_dispatch:
inputs:
packages:
description: 'Space-separated package names (default: all)'
required: false
default: ''
jobs:
changed:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.changed.outputs.matrix }}
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # ratchet:actions/checkout@v6
with:
fetch-depth: 0
- id: changed
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
CHANGED="${{ inputs.packages }}"
[ -n "$CHANGED" ] || CHANGED=$(ls packages)
else
if [ "${{ github.event_name }}" = "pull_request" ]; then
RANGE="origin/${{ github.base_ref }}...HEAD"
elif git rev-parse -q --verify "${{ github.event.before }}" > /dev/null; then
RANGE="${{ github.event.before }}..HEAD"
else
RANGE="HEAD~1..HEAD"
fi
CHANGED=$(git diff --name-only "$RANGE" -- packages/ | cut -d/ -f2)
# tooling changes affect every package
if git diff --name-only "$RANGE" | grep -qE '^(bin/|\.github/|composer\.json|pint\.json)'; then
CHANGED=$(ls packages)
fi
fi
CHANGED=$(echo "$CHANGED" | tr ' ' '\n' | sort -u \
| while read -r package; do if [ -d "packages/$package" ]; then echo "$package"; fi; done)
# docs-only change: no packages to test
if [ -z "$CHANGED" ]; then
echo "matrix=[]" >> "$GITHUB_OUTPUT"
exit 0
fi
# Dependents of changed packages run linked (siblings resolved from
# the local checkout); changed packages run registry-resolved —
# unless a sibling they depend on also changed, which makes the
# registry combination unbuildable until that sibling releases.
LINKED=$(bin/monorepo dependents $CHANGED)
MATRIX=$(
{
for package in $LINKED; do
printf '{"package":"%s","linked":true}\n' "$package"
done
for package in $CHANGED; do
case " $(echo $LINKED) " in
*" $package "*) ;;
*) printf '{"package":"%s","linked":false}\n' "$package" ;;
esac
done
} | jq --compact-output --slurp 'unique'
)
echo "matrix=$MATRIX" >> "$GITHUB_OUTPUT"
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # ratchet:actions/checkout@v6
- run: bin/monorepo validate
- name: Enforce pinned workflow actions
run: >
docker run --rm -v "$PWD:$PWD" -w "$PWD" ghcr.io/sethvargo/ratchet:0.11.4
lint .github/workflows/*.yml
- name: Lint documentation
uses: vale-cli/vale-action@85f9f7f2c5f449ac0ae5b66662961bae3f77ca6a # ratchet:vale-cli/vale-action@v2.1.2
with:
version: 3.15.1
files: '["README.md", "docs", "packages"]'
fail_on_error: true
filter_mode: nofilter
test:
name: test (${{ matrix.package }}${{ matrix.linked && ', linked' || '' }})
needs: changed
if: needs.changed.outputs.matrix != '[]'
runs-on: ubuntu-latest
environment: ${{ matrix.package == 'vcs' && 'vcs' || '' }}
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.changed.outputs.matrix) }}
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # ratchet:actions/checkout@v6
- id: meta
run: |
EXTENSIONS=$(jq -r '[(.require, ."require-dev", .suggest | select(. != null)) | keys[] | select(startswith("ext-")) | ltrimstr("ext-")] | unique | join(", ")' packages/${{ matrix.package }}/composer.json)
echo "extensions=$EXTENSIONS" >> "$GITHUB_OUTPUT"
# Test each package on the higher of its declared PHP floor and the
# baseline 8.4, so a package that requires a newer PHP (e.g. >=8.5)
# is tested there without dropping siblings below the baseline.
FLOOR=$(jq -r '.require.php // ""' packages/${{ matrix.package }}/composer.json | grep -oE '[0-9]+\.[0-9]+' | head -1)
PHP=$(printf '%s\n8.4\n' "$FLOOR" | grep -E '^[0-9]+\.[0-9]+$' | sort -V | tail -1)
echo "php=$PHP" >> "$GITHUB_OUTPUT"
- uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # ratchet:shivammathur/setup-php@v2
with:
php-version: ${{ steps.meta.outputs.php }}
extensions: ${{ steps.meta.outputs.extensions }}
coverage: none
- if: ${{ !matrix.linked }}
run: bin/monorepo check ${{ matrix.package }}
- env:
TESTS_GITHUB_PRIVATE_KEY: ${{ secrets.TESTS_GITHUB_PRIVATE_KEY }}
TESTS_GITHUB_APP_IDENTIFIER: ${{ secrets.TESTS_GITHUB_APP_IDENTIFIER }}
TESTS_GITHUB_INSTALLATION_ID: ${{ secrets.TESTS_GITHUB_INSTALLATION_ID }}
TESTS_BITBUCKET_ACCESS_TOKEN: ${{ secrets.TESTS_BITBUCKET_ACCESS_TOKEN }}
TESTS_BITBUCKET_WORKSPACE: ${{ secrets.TESTS_BITBUCKET_WORKSPACE }}
TESTS_WHATSAPP_ACCESS_TOKEN: ${{ secrets.TESTS_WHATSAPP_ACCESS_TOKEN }}
TESTS_WHATSAPP_PHONE_NUMBER_ID: ${{ secrets.TESTS_WHATSAPP_PHONE_NUMBER_ID }}
TESTS_WHATSAPP_BUSINESS_ACCOUNT_ID: ${{ secrets.TESTS_WHATSAPP_BUSINESS_ACCOUNT_ID }}
TESTS_WHATSAPP_RECIPIENT: ${{ secrets.TESTS_WHATSAPP_RECIPIENT }}
run: bin/monorepo test ${{ matrix.package }} ${{ matrix.linked && '--linked' || '' }}