fix: require the minimum interface needed (#19571) #17166
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Flow Validation | |
on: | |
push: | |
branches: [main, '24.4', '24.3', '24.2', '24.1', '24.0', '23.3', '9.1'] | |
workflow_dispatch: | |
pull_request_target: | |
types: [opened, synchronize, reopened, edited] | |
permissions: | |
contents: read | |
concurrency: | |
group: ${{ github.head_ref || github.ref_name }} | |
cancel-in-progress: true | |
jobs: | |
build: | |
timeout-minutes: 30 | |
runs-on: ubuntu-22.04 | |
outputs: | |
matrix-unit: ${{ steps.set-matrix.outputs.matrix-unit }} | |
matrix-it: ${{ steps.set-matrix.outputs.matrix-it }} | |
steps: | |
- run: echo "Concurrency Group = ${{ github.head_ref || github.ref_name }}" | |
- uses: actions-cool/check-user-permission@main | |
id: checkUser | |
with: | |
username: ${{github.triggering_actor}} | |
require: 'write' | |
- name: Fail on external workflow triggering | |
if: ${{ steps.checkUser.outputs.require-result != 'true' && github.actor != 'dependabot[bot]' }} | |
run: | | |
echo "🚫 **${{ github.actor }}** is an external contributor, a **${{ github.repository }}** team member has to review this changes and re-run this build" \ | |
| tee -a $GITHUB_STEP_SUMMARY && exit 1 | |
- name: Check secrets | |
run: | | |
[ -z "${{secrets.TB_LICENSE}}" ] \ | |
&& echo "🚫 **TB_LICENSE** is not defined, check that **${{github.repository}}** repo has a valid secret" \ | |
| tee -a $GITHUB_STEP_SUMMARY && exit 1 || exit 0 | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: '20.9.0' | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
- name: Set up Maven | |
uses: stCarolas/setup-maven@v5 | |
with: | |
maven-version: 3.8.7 | |
- name: Set flow version to 999.99-SNAPSHOT | |
run: | | |
./scripts/computeMatrix.js set-version --version=999.99-SNAPSHOT | |
- uses: actions/cache@v4 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
restore-keys: ${{ runner.os }}-maven- | |
- name: Generate matrices | |
id: set-matrix | |
run: | | |
echo "matrix-it=$(./scripts/computeMatrix.js it-tests --parallel=13 current module args)" >> $GITHUB_OUTPUT | |
echo "matrix-unit=$(./scripts/computeMatrix.js unit-tests --parallel=1 current module args)" >> $GITHUB_OUTPUT | |
- name: Compile and Install Flow | |
run: | | |
cmd="mvn install -B -ntp -DskipTests -pl \!flow-plugins/flow-gradle-plugin" | |
eval $cmd -T 2C -q || eval $cmd | |
- name: Save workspace | |
run: | | |
tar cf workspace.tar -C ~/ $(cd ~/ && echo .m2/repository/com/vaadin/*/999.99-SNAPSHOT) | |
tar rf workspace.tar $(find . -d -name target) | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: saved-workspace | |
path: workspace.tar | |
unit-tests: | |
needs: build | |
timeout-minutes: 30 | |
strategy: | |
fail-fast: false | |
matrix: ${{fromJson(needs.build.outputs.matrix-unit)}} | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
- name: Set up Maven | |
uses: stCarolas/setup-maven@v5 | |
with: | |
maven-version: 3.8.7 | |
- name: Set flow version to 999.99-SNAPSHOT | |
run: | | |
./scripts/computeMatrix.js set-version --version=999.99-SNAPSHOT | |
- uses: actions/cache@v4 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
restore-keys: ${{ runner.os }}-maven- | |
- uses: actions/download-artifact@v4 | |
if: ${{ github.run_attempt == 1 }} | |
with: | |
name: saved-workspace | |
- name: Restore Workspace | |
if: ${{ github.run_attempt == 1 }} | |
run: | | |
set -x | |
tar xf workspace.tar | |
tar cf - .m2 | (cd ~ && tar xf -) | |
- name: Compile and Install Flow | |
if: ${{ github.run_attempt > 1 }} | |
run: | | |
./scripts/computeMatrix.js set-version --version=999.99-SNAPSHOT | |
cmd="mvn install -B -ntp -DskipTests -pl \!flow-plugins/flow-gradle-plugin" | |
eval $cmd -T 2C -q || eval $cmd | |
- name: Set TB License | |
run: | | |
TB_LICENSE=${{secrets.TB_LICENSE}} | |
mkdir -p ~/.vaadin/ | |
echo '{"username":"'`echo $TB_LICENSE | cut -d / -f1`'","proKey":"'`echo $TB_LICENSE | cut -d / -f2`'"}' > ~/.vaadin/proKey | |
- name: Unit Test | |
run: | | |
echo Running TESTS: ${{ strategy.job-index }} ${{matrix.module}} ${{ matrix.args }} | |
[ -n "${{matrix.module}}" ] && \ | |
ARGS="-pl ${{matrix.module}} -Dtest=${{matrix.args}}" || \ | |
ARGS="-pl ${{matrix.args}}" | |
cmd="mvn -B -ntp -T 1C $ARGS" | |
set -x -e -o pipefail | |
$cmd verify -Dmaven.javadoc.skip=false | tee mvn-unit-tests-${{matrix.current}}.out | |
- name: Package test-report files | |
if: ${{ failure() || success() }} | |
run: find . -name surefire-reports -o -name failsafe-reports -o -name error-screenshots -o -name "mvn-*.out" | tar -czf tests-report-unit-${{matrix.current}}.tgz -T - | |
- uses: actions/upload-artifact@v4 | |
if: ${{ failure() || success() }} | |
with: | |
name: tests-output-unit-${{ matrix.current }} | |
path: tests-report-*.tgz | |
it-tests: | |
needs: build | |
timeout-minutes: 30 | |
strategy: | |
fail-fast: false | |
matrix: ${{fromJson(needs.build.outputs.matrix-it)}} | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: '20.9.0' | |
- uses: pnpm/action-setup@v3 | |
with: | |
version: '8.3.1' | |
- uses: oven-sh/setup-bun@v1 | |
with: | |
bun-version: '1.0.7' | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
- name: Set up Maven | |
uses: stCarolas/setup-maven@v5 | |
with: | |
maven-version: 3.8.7 | |
- name: Set flow version to 999.99-SNAPSHOT | |
run: | | |
./scripts/computeMatrix.js set-version --version=999.99-SNAPSHOT | |
- uses: actions/cache@v4 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
restore-keys: ${{ runner.os }}-maven- | |
- uses: actions/download-artifact@v4 | |
if: ${{ github.run_attempt == 1 }} | |
with: | |
name: saved-workspace | |
- name: Restore Workspace | |
if: ${{ github.run_attempt == 1 }} | |
run: | | |
tar xf workspace.tar | |
tar cf - .m2 | (cd ~ && tar xf -) | |
- name: Compile and Install Flow | |
if: ${{ github.run_attempt > 1 }} | |
run: | | |
./scripts/computeMatrix.js set-version --version=999.99-SNAPSHOT | |
cmd="mvn install -B -ntp -DskipTests -pl \!flow-plugins/flow-gradle-plugin" | |
eval $cmd -T 2C -q || eval $cmd | |
- name: Set TB License | |
run: | | |
TB_LICENSE=${{secrets.TB_LICENSE}} | |
mkdir -p ~/.vaadin/ | |
echo '{"username":"'`echo $TB_LICENSE | cut -d / -f1`'","proKey":"'`echo $TB_LICENSE | cut -d / -f2`'"}' > ~/.vaadin/proKey | |
- name: Compile Shared modules | |
run: | | |
if [ ${{matrix.current}} -eq 2 -o ${{matrix.current}} -eq 3 ]; then | |
cmd="mvn install -B -ntp -DskipTests -Pit-shared-modules -amd -pl flow-tests" | |
$cmd -T 1C || $cmd | |
fi | |
if [ ${{matrix.current}} -eq 4 -o ${{matrix.current}} -eq 5 -o ${{matrix.current}} -eq 6 ]; then | |
cmd="mvn install -B -ntp -DskipTests -Pit-shared-spring-modules -amd -pl flow-tests" | |
$cmd -T 1C || $cmd | |
fi | |
- name: Run ITs | |
run: | | |
[ -n "${{matrix.module}}" ] && \ | |
ARGS="-Dfailsafe.forkCount=4 -pl ${{matrix.module}} -Dit.test=${{matrix.args}}" || \ | |
ARGS="-pl ${{matrix.args}}" | |
cmd="mvn -V -B -ntp -e -fae -Dcom.vaadin.testbench.Parameters.testsInParallel=5 -Dfailsafe.rerunFailingTestsCount=2 -Dmaven.wagon.httpconnectionManager.ttlSeconds=25 -Dmaven.wagon.http.retryHandler.count=3 -Pbun $ARGS" | |
set -x -e -o pipefail | |
$cmd verify | tee -a mvn-it-tests-${{matrix.current}}.out | |
- name: Package test-report files | |
if: ${{ failure() || success() }} | |
run: find . -name surefire-reports -o -name failsafe-reports -o -name error-screenshots -o -name "mvn-*.out" | tar -czf tests-report-it-${{matrix.current}}.tgz -T - | |
- uses: actions/upload-artifact@v4 | |
if: ${{ failure() || success() }} | |
with: | |
name: tests-output-it-${{ matrix.current }} | |
path: tests-report-*.tgz | |
test-results: | |
permissions: | |
actions: write | |
issues: read | |
checks: write | |
pull-requests: write | |
if: ${{ failure() || success() }} | |
needs: [unit-tests, it-tests] | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Merge Artifacts | |
uses: actions/upload-artifact/merge@v4 | |
with: | |
name: tests-output | |
pattern: tests-output-* | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
- uses: actions/download-artifact@v4 | |
with: | |
name: tests-output | |
- name: extract downloaded files | |
run: for i in *.tgz; do tar xvf $i; done | |
- name: Publish Unit Test Results | |
uses: EnricoMi/publish-unit-test-result-action@v2 | |
with: | |
junit_files: "**/target/*-reports/TEST*.xml" | |
check_run_annotations: all tests, skipped tests | |
- uses: geekyeggo/delete-artifact@v4 | |
with: | |
name: | | |
saved-workspace | |
- name: Compute Stats | |
run: | | |
./scripts/computeMatrix.js test-results >> $GITHUB_STEP_SUMMARY | |
- name: Set Failure Status | |
if: ${{ always() && (needs.unit-tests.result != 'success' || needs.it-tests.result != 'success') }} | |
run: | | |
echo "🚫 THERE ARE TEST MODULES WITH FAILURES or BEEN CANCELLED" | tee -a $GITHUB_STEP_SUMMARY | |
exit 1 |