Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add PR validation pipeline to GitHub Actions #4976

Merged
merged 80 commits into from
Jan 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
5d7c774
Add PR validation
compulim Dec 5, 2023
6a3b866
Add needs
compulim Dec 5, 2023
965b442
Compress less files
compulim Dec 5, 2023
a40130e
Fix pipe
compulim Dec 5, 2023
52df028
Remove cache
compulim Dec 5, 2023
e1e4b80
Add babel-jest
compulim Dec 5, 2023
ab3540f
Add babel.config.json
compulim Dec 6, 2023
32a816f
Add deps
compulim Dec 6, 2023
610aeb8
Fix syntax
compulim Dec 6, 2023
2163ff1
Fix run jest
compulim Dec 6, 2023
cf6dcbc
Fix Docker
compulim Dec 6, 2023
ccfae89
Add Dockerfile
compulim Dec 6, 2023
e2d8b90
Add serve-test.json
compulim Dec 6, 2023
2bcb45a
Add sharding
compulim Dec 6, 2023
a33c45e
Update matrix name
compulim Dec 6, 2023
8e1e5f8
Add unit tests
compulim Dec 6, 2023
8a4d738
Add names
compulim Dec 6, 2023
549ac9e
Scale chrome=2
compulim Dec 6, 2023
a07e7cc
Use Jest 28
compulim Dec 6, 2023
16a9b08
Fix --testPathPattern
compulim Dec 6, 2023
4ab671c
Use babel-jest@28
compulim Dec 6, 2023
3a91a87
Run jest@28 in unit tests
compulim Dec 6, 2023
42359f4
Skip nightly tests
compulim Dec 6, 2023
b624375
Fix run Jest
compulim Dec 6, 2023
33a905b
Run npm ci
compulim Dec 6, 2023
2c9e143
Run npm ci under packages/test/harness/
compulim Dec 6, 2023
cc51fac
Remove jest-version
compulim Dec 6, 2023
a8d5a8c
20 shards
compulim Dec 6, 2023
117ece6
Add test results
compulim Dec 6, 2023
c2c9add
Add needs
compulim Dec 6, 2023
65bede2
Fix docker-compose down
compulim Dec 6, 2023
01e46e8
Use a different continue-on-error pattern
compulim Dec 6, 2023
a454735
Disable fail-fast
compulim Dec 6, 2023
f56b2a5
Add GitHub Actions reporter
compulim Dec 6, 2023
3a92fb4
Down to 10
compulim Dec 6, 2023
5147b64
Add timeout minutes
compulim Dec 6, 2023
4a2785a
Add timeout minutes to unit tests
compulim Dec 6, 2023
d35c884
Remove chrome.dockerfile
compulim Dec 6, 2023
8a9c8e7
Use 20 shards
compulim Dec 6, 2023
5145726
Use 19 shards
compulim Dec 6, 2023
119b171
Change downloads folder
compulim Dec 6, 2023
4ae5626
Run precommit
compulim Dec 6, 2023
eb0b809
Rename lint to static code analysis
compulim Dec 6, 2023
d4bf8dd
Use 18 shards
compulim Dec 6, 2023
4c51627
Build during SCA
compulim Dec 6, 2023
4aa16e9
20 shards
compulim Dec 6, 2023
ab0219c
Upload cobertura-coverage.xml
compulim Dec 6, 2023
12fb859
Merge and print coverage
compulim Dec 6, 2023
e30250c
Add branch coverage
compulim Dec 6, 2023
c3121fb
Add lcov and NODE_ENV
compulim Dec 6, 2023
7fe8e3d
Fix lcov file extension
compulim Dec 6, 2023
3119f6b
Print Docker logs
compulim Dec 6, 2023
34556e8
Disable coverage
compulim Dec 6, 2023
212bfee
Wait until WebDriver hub is ready
compulim Dec 6, 2023
3f0fe8e
Simplify
compulim Dec 6, 2023
1b1e1ee
Disable pipefail
compulim Dec 6, 2023
ad93411
Enable instrumentation
compulim Dec 6, 2023
9bfbdfa
Fix unit test coverage
compulim Dec 6, 2023
995f1db
Disable Gcovr
compulim Dec 6, 2023
acece54
Install lcov
compulim Dec 6, 2023
6fc093c
Add branch coverage
compulim Dec 6, 2023
7439e4f
Better print coverage
compulim Dec 6, 2023
8af1f66
Remove Cobertura
compulim Dec 6, 2023
e8e12ea
Remove pipefail
compulim Dec 6, 2023
71ea771
Upload failing snapshots
compulim Dec 6, 2023
a847096
Typo
compulim Dec 6, 2023
c5e0178
Packing bundle/core src
compulim Dec 6, 2023
4c6669d
Add types to unit test
compulim Dec 6, 2023
df35701
Move types test to packages
compulim Dec 6, 2023
1bd16c5
Use Node 18
compulim Dec 6, 2023
e31f85b
Clean up and enable secure feed
compulim Dec 6, 2023
7fca027
Better coverage merging
compulim Dec 6, 2023
82a49e0
Add tracefile individually
compulim Dec 6, 2023
f7acd6f
Add mutable performance
compulim Dec 6, 2023
c673483
Use Node.js 18.18
compulim Dec 6, 2023
bc43dfb
Fix flaky
compulim Dec 7, 2023
58d883b
Add comments
compulim Dec 7, 2023
cbd9306
Fix flaky
compulim Dec 7, 2023
4c6165c
Add entry
compulim Dec 7, 2023
1780197
Enable Terrapin before setting up Node to improve cache
compulim Dec 7, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
310 changes: 310 additions & 0 deletions .github/workflows/pull-request-validation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,310 @@
name: Pull request validation

on:
pull_request:
branches:
- main

paths-ignore:
- .github
- .vscode

push:
branches:
- feat-github-workflow # Keeping the branch here so we can try out something later quickly

workflow_dispatch: {}

defaults:
run:
shell: bash

env:
CI_PULL_REQUEST: 1 # Skip nightly tests
NODE_ENV: test # Add instrumentation code
node-version: 18.18 # Need to bump jest@29 to resolve something in https://github.com/facebook/react-native/issues/35701
skip-secure-feed: false

jobs:
build:
name: Build
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- if: "env.skip-secure-feed != 'true'"
name: Enable secure feed
run: npx https://aka.ms/EnableSecureFeed

- name: Use Node.js ${{ env.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.node-version }}
cache: npm

- run: npm clean-install

- run: npm run bootstrap

- run: npm run build --if-present

- name: Pack Docker artifact
run: |
zip docker.zip -r@ <<EOF
./__tests__/
./babel-jest-config.js
./babel-passthru-transformer.js
./babel.config.json
./docker-compose-wsl2.yml
./jest.config.js
./package.json
./package-lock.json
./packages/bundle/dist/
./packages/test/harness/
./packages/test/page-object/dist/
./serve-test.json
./testharness.dockerfile
./testharness2.dockerfile
EOF

- run: ls -l docker.zip

- name: Upload Docker artifact
uses: actions/upload-artifact@v3
with:
name: docker
path: docker.zip
retention-days: 1

static-code-analysis:
name: Static code analysis
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- if: "env.skip-secure-feed != 'true'"
name: Enable secure feed
run: npx https://aka.ms/EnableSecureFeed

- name: Use Node.js ${{ env.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.node-version }}
cache: npm

- run: npm clean-install

- run: npm run bootstrap

- run: npm run build --if-present

- run: npm run precommit --if-present

unit-test:
name: Unit test
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- if: "env.skip-secure-feed != 'true'"
name: Enable secure feed
run: npx https://aka.ms/EnableSecureFeed

- name: Use Node.js ${{ env.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.node-version }}
cache: npm

- run: npm clean-install

- run: npm run bootstrap

- run: npm run build --if-present

- name: Run jest --testPathPattern packages/
run: |
./node_modules/.bin/jest \
--ci \
--coverage true \
--forceExit \
--logHeapUsage \
--runInBand \
--testPathPattern=/packages/\
timeout-minutes: 10

- if: always()
name: Append ID to test result
run: |
ls -laR .

mv jest.json jest-unit.json
mv lcov.info lcov-unit.info
mv nunit3.xml nunit3-unit.xml
mv result.trx result-unit.trx
working-directory: ./coverage

- if: always()
name: Upload test results
uses: actions/upload-artifact@v3
with:
name: test-result
path: |
./coverage/jest-*.json
./coverage/lcov-*.info
./coverage/nunit3-*.xml
./coverage/result-*.trx

html-test:
name: HTML test (${{ format('{0}/{1}', matrix.shard-index, matrix.shard-count) }})
needs:
- build
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
shard-index: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
shard-count: [20]

steps:
- if: "env.skip-secure-feed != 'true'"
name: Enable secure feed
run: npx https://aka.ms/EnableSecureFeed

- name: Use Node.js ${{ env.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.node-version }}

- name: Download Docker artifact
uses: actions/download-artifact@v3
with:
name: docker

- run: unzip docker.zip

- run: rm docker.zip

- run: npm clean-install

- name: Run docker-compose build
run: docker-compose -f docker-compose-wsl2.yml build --build-arg REGISTRY=mcr.microsoft.com/mirror/docker/library

- name: Run docker-compose up
run: docker-compose -f docker-compose-wsl2.yml up --detach --scale chrome=2

- name: Wait for Docker to be ready
run: |
set +e # Disable per-command fail, we will handle cURL fail.

while true
do
curl http://localhost:4444/wd/hub/status > /tmp/wd-status.json

[[ $? -eq 0 ]] && cat /tmp/wd-status.json | jq -r 'if (.value.ready != true) then halt_error(1) else empty end'
[[ $? -eq 0 ]] && break

sleep 1
done

- name: Run jest --shard=${{ format('{0}/{1}', matrix.shard-index, matrix.shard-count) }}
run: |
./node_modules/.bin/jest \
--ci \
--coverage true \
--forceExit \
--logHeapUsage \
--runInBand \
--shard=${{ format('{0}/{1}', matrix.shard-index, matrix.shard-count) }}
timeout-minutes: 10

- if: always()
name: Print Docker logs
run: docker-compose -f docker-compose-wsl2.yml logs

- if: always()
name: Append ID to test result
run: |
ls -laR .

mv jest.json jest-${{ matrix.shard-index }}.json
mv lcov.info lcov-${{ matrix.shard-index }}.info
mv nunit3.xml nunit3-${{ matrix.shard-index }}.xml
mv result.trx result-${{ matrix.shard-index }}.trx
working-directory: ./coverage

- if: always()
name: Upload test results
uses: actions/upload-artifact@v3
with:
name: test-result
path: |
./coverage/jest-*.json
./coverage/lcov-*.info
./coverage/nunit3-*.xml
./coverage/result-*.trx

- if: failure()
name: Upload test snapshot diffs
uses: actions/upload-artifact@v3
with:
name: test-snapshot-diff
path: ./__tests__/__image_snapshots__/*/__diff_output__/*

merge-test-result:
if: always()
name: Merge test result
needs:
- html-test
- unit-test
runs-on: ubuntu-latest

steps:
- name: Download test results
uses: actions/download-artifact@v3
with:
name: test-result

- name: Install lcov
run: sudo apt install -y lcov

- name: Merge lcov-*.info
run: |
lcov \
--rc lcov_branch_coverage=1 \
--add-tracefile lcov-1.info \
--add-tracefile lcov-2.info \
--add-tracefile lcov-3.info \
--add-tracefile lcov-4.info \
--add-tracefile lcov-5.info \
--add-tracefile lcov-6.info \
--add-tracefile lcov-7.info \
--add-tracefile lcov-8.info \
--add-tracefile lcov-9.info \
--add-tracefile lcov-10.info \
--add-tracefile lcov-11.info \
--add-tracefile lcov-12.info \
--add-tracefile lcov-13.info \
--add-tracefile lcov-14.info \
--add-tracefile lcov-15.info \
--add-tracefile lcov-16.info \
--add-tracefile lcov-17.info \
--add-tracefile lcov-18.info \
--add-tracefile lcov-19.info \
--add-tracefile lcov-20.info \
--add-tracefile lcov-unit.info \
--output-file lcov.info

- if: always()
name: Print coverage list
run: lcov --rc lcov_branch_coverage=1 --list lcov.info

- if: always()
name: Print coverage summary
run: |
echo \`\`\` >> $GITHUB_STEP_SUMMARY
lcov --rc lcov_branch_coverage=1 --summary lcov.info | tee --append $GITHUB_STEP_SUMMARY
echo \`\`\` >> $GITHUB_STEP_SUMMARY
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.

## [Unreleased]

### Changed

- Moved pull request validation pipeline to GitHub Actions, by [@compulim](https://github.com/compulim), in PR [#4976](https://github.com/microsoft/BotFramework-WebChat/pull/4976)

## [4.16.0] - 2023-11-16

### Breaking changes
Expand Down
3 changes: 3 additions & 0 deletions __tests__/html/updateActivity.sameActivityId.html
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@
// WHEN: All images (in the carousel) are loaded.
await pageConditions.allImagesLoaded();

// WHEN: Scroll to bottom completed.
await pageConditions.scrollToBottomCompleted();

// THEN: It should show 3 messages: 2 outgoing messages and 1 incoming message (carousel).
await host.snapshot();
});
Expand Down
5 changes: 4 additions & 1 deletion __tests__/html/updateActivity.undefinedActivityId.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en-US">
<head>
<link href="/assets/index.css" rel="stylesheet" type="text/css" />
Expand Down Expand Up @@ -61,6 +61,9 @@
// WHEN: All images are loaded.
await pageConditions.allImagesLoaded();

// WHEN: Scroll to bottom completed.
await pageConditions.scrollToBottomCompleted();

// THEN: It should show 5 messages in total.
await host.snapshot();
});
Expand Down

This file was deleted.

3 changes: 0 additions & 3 deletions __tests__/types/__typescript__/pass/correct-type-dir.tsx

This file was deleted.

This file was deleted.

This file was deleted.

7 changes: 0 additions & 7 deletions chrome.dockerfile

This file was deleted.

6 changes: 3 additions & 3 deletions docker-compose-wsl2.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ services:
# On Windows, run with COMPOSE_CONVERT_WINDOWS_PATHS=1

chrome:
build:
context: ./
dockerfile: chrome.dockerfile
image: selenium/node-chrome:110.0
depends_on:
- selenium-hub
- webchat
Expand All @@ -18,6 +16,8 @@ services:
SE_OPTS: '--log-level WARNING'
SE_NODE_SESSION_TIMEOUT: '300'
shm_size: '2.5gb'
volumes:
- ./__tests__/setup/local/:/home/seluser/Downloads

selenium-hub:
image: selenium/hub:4.8.1
Expand Down
Loading