Scheduled #3
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: Scheduled | |
on: | |
schedule: | |
- cron: '0 0 * * *' # every day at midnight | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
check_date: # https://stackoverflow.com/questions/63014786/how-to-schedule-a-github-actions-nightly-build-but-run-it-only-when-there-where | |
runs-on: ubuntu-latest | |
name: Check latest commit | |
outputs: | |
should_run: ${{ steps.should_run.outputs.should_run }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: print latest_commit | |
run: echo ${{ github.sha }} | |
- id: should_run | |
continue-on-error: true | |
name: check latest commit is less than a day | |
if: ${{ github.event_name == 'schedule' }} | |
run: test -z $(git rev-list --after="24 hours" ${{ github.sha }}) && echo "::set-output name=should_run::false" | |
# run Sytest in different variations | |
sytest: | |
needs: check_date | |
if: ${{ needs.check_date.outputs.should_run != 'false' }} | |
timeout-minutes: 60 | |
name: "Sytest (${{ matrix.label }})" | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- label: SQLite native | |
- label: SQLite Cgo | |
cgo: 1 | |
- label: PostgreSQL | |
postgres: postgres | |
container: | |
image: matrixdotorg/sytest-dendrite:latest | |
volumes: | |
- ${{ github.workspace }}:/src | |
- /root/.cache/go-build:/github/home/.cache/go-build | |
- /root/.cache/go-mod:/gopath/pkg/mod | |
env: | |
POSTGRES: ${{ matrix.postgres && 1}} | |
SYTEST_BRANCH: ${{ github.head_ref }} | |
RACE_DETECTION: 1 | |
COVER: 1 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cache/go-build | |
/gopath/pkg/mod | |
key: ${{ runner.os }}-go-sytest-${{ hashFiles('**/go.sum') }} | |
restore-keys: | | |
${{ runner.os }}-go-sytest- | |
- name: Run Sytest | |
run: /bootstrap.sh dendrite | |
working-directory: /src | |
- name: Summarise results.tap | |
if: ${{ always() }} | |
run: /sytest/scripts/tap_to_gha.pl /logs/results.tap | |
- name: Sytest List Maintenance | |
if: ${{ always() }} | |
run: /src/show-expected-fail-tests.sh /logs/results.tap /src/sytest-whitelist /src/sytest-blacklist | |
continue-on-error: true # not fatal | |
- name: Are We Synapse Yet? | |
if: ${{ always() }} | |
run: /src/are-we-synapse-yet.py /logs/results.tap -v | |
continue-on-error: true # not fatal | |
- name: Upload Sytest logs | |
uses: actions/upload-artifact@v4 | |
if: ${{ always() }} | |
with: | |
name: Sytest Logs - ${{ job.status }} - (Dendrite ${{ join(matrix.*, ' ') }}) | |
path: | | |
/logs/results.tap | |
/logs/**/*.log* | |
/logs/**/covdatafiles/** | |
sytest-coverage: | |
timeout-minutes: 5 | |
name: "Sytest Coverage" | |
runs-on: ubuntu-latest | |
needs: [ sytest, check_date ] # only run once Sytest is done and there was a commit | |
if: ${{ always() && needs.check_date.outputs.should_run != 'false' }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: 'stable' | |
cache: true | |
- name: Download all artifacts | |
uses: actions/download-artifact@v4 | |
- name: Collect coverage | |
run: | | |
go tool covdata textfmt -i="$(find Sytest* -name 'covmeta*' -type f -exec dirname {} \; | uniq | paste -s -d ',' -)" -o sytest.cov | |
grep -Ev 'relayapi|setup/mscs|api_trace' sytest.cov > final.cov | |
go tool covdata func -i="$(find Sytest* -name 'covmeta*' -type f -exec dirname {} \; | uniq | paste -s -d ',' -)" | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
files: ./final.cov | |
flags: sytest | |
fail_ci_if_error: true | |
token: ${{ secrets.CODECOV_TOKEN }} | |
# run Complement | |
complement: | |
needs: check_date | |
if: ${{ needs.check_date.outputs.should_run != 'false' }} | |
name: "Complement (${{ matrix.label }})" | |
timeout-minutes: 60 | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- label: SQLite native | |
cgo: 0 | |
- label: SQLite Cgo | |
cgo: 1 | |
- label: PostgreSQL | |
postgres: Postgres | |
cgo: 0 | |
steps: | |
# Env vars are set file a file given by $GITHUB_PATH. We need both Go 1.17 and GOPATH on env to run Complement. | |
# See https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#adding-a-system-path | |
- name: "Set Go Version" | |
run: | | |
echo "$GOROOT_1_17_X64/bin" >> $GITHUB_PATH | |
echo "~/go/bin" >> $GITHUB_PATH | |
- name: "Install Complement Dependencies" | |
# We don't need to install Go because it is included on the Ubuntu 20.04 image: | |
# See https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md specifically GOROOT_1_17_X64 | |
run: | | |
sudo apt-get update && sudo apt-get install -y libolm3 libolm-dev | |
go install github.com/gotesttools/gotestfmt/v2/cmd/gotestfmt@latest | |
- name: Run actions/checkout@v4 for dendrite | |
uses: actions/checkout@v4 | |
with: | |
path: dendrite | |
# Attempt to check out the same branch of Complement as the PR. If it | |
# doesn't exist, fallback to main. | |
- name: Checkout complement | |
shell: bash | |
run: | | |
mkdir -p complement | |
# Attempt to use the version of complement which best matches the current | |
# build. Depending on whether this is a PR or release, etc. we need to | |
# use different fallbacks. | |
# | |
# 1. First check if there's a similarly named branch (GITHUB_HEAD_REF | |
# for pull requests, otherwise GITHUB_REF). | |
# 2. Attempt to use the base branch, e.g. when merging into release-vX.Y | |
# (GITHUB_BASE_REF for pull requests). | |
# 3. Use the default complement branch ("master"). | |
for BRANCH_NAME in "$GITHUB_HEAD_REF" "$GITHUB_BASE_REF" "${GITHUB_REF#refs/heads/}" "master"; do | |
# Skip empty branch names and merge commits. | |
if [[ -z "$BRANCH_NAME" || $BRANCH_NAME =~ ^refs/pull/.* ]]; then | |
continue | |
fi | |
(wget -O - "https://github.com/matrix-org/complement/archive/$BRANCH_NAME.tar.gz" | tar -xz --strip-components=1 -C complement) && break | |
done | |
# Build initial Dendrite image | |
- run: docker build --build-arg=CGO=${{ matrix.cgo }} -t complement-dendrite:${{ matrix.postgres }}${{ matrix.cgo }} -f build/scripts/Complement${{ matrix.postgres }}.Dockerfile . | |
working-directory: dendrite | |
env: | |
DOCKER_BUILDKIT: 1 | |
- name: Create post test script | |
run: | | |
cat <<EOF > /tmp/posttest.sh | |
#!/bin/bash | |
mkdir -p /tmp/Complement/logs/\$2/\$1/ | |
docker cp \$1:/tmp/covdatafiles/. /tmp/Complement/logs/\$2/\$1/ | |
EOF | |
chmod +x /tmp/posttest.sh | |
# Run Complement | |
- run: | | |
set -o pipefail && | |
go test -v -json -tags dendrite_blacklist ./tests ./tests/csapi 2>&1 | gotestfmt -hide all | |
shell: bash | |
name: Run Complement Tests | |
env: | |
COMPLEMENT_BASE_IMAGE: complement-dendrite:${{ matrix.postgres }}${{ matrix.cgo }} | |
COMPLEMENT_SHARE_ENV_PREFIX: COMPLEMENT_DENDRITE_ | |
COMPLEMENT_DENDRITE_COVER: 1 | |
COMPLEMENT_POST_TEST_SCRIPT: /tmp/posttest.sh | |
working-directory: complement | |
- name: Upload Complement logs | |
uses: actions/upload-artifact@v4 | |
if: ${{ always() }} | |
with: | |
name: Complement Logs - (Dendrite ${{ join(matrix.*, ' ') }}) | |
path: | | |
/tmp/Complement/logs/** | |
complement-coverage: | |
timeout-minutes: 5 | |
name: "Complement Coverage" | |
runs-on: ubuntu-latest | |
needs: [ complement, check_date ] # only run once Complements is done and there was a commit | |
if: ${{ always() && needs.check_date.outputs.should_run != 'false' }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: 'stable' | |
cache: true | |
- name: Download all artifacts | |
uses: actions/download-artifact@v4 | |
- name: Collect coverage | |
run: | | |
go tool covdata textfmt -i="$(find Complement* -name 'covmeta*' -type f -exec dirname {} \; | uniq | paste -s -d ',' -)" -o complement.cov | |
grep -Ev 'relayapi|setup/mscs|api_trace' complement.cov > final.cov | |
go tool covdata func -i="$(find Complement* -name 'covmeta*' -type f -exec dirname {} \; | uniq | paste -s -d ',' -)" | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
files: ./final.cov | |
flags: complement | |
fail_ci_if_error: true | |
token: ${{ secrets.CODECOV_TOKEN }} # required | |
element-web: | |
if: ${{ false }} # disable for now, as Cypress has been replaced by Playwright | |
timeout-minutes: 120 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: tecolicom/actions-use-apt-tools@v1 | |
with: | |
# Our test suite includes some screenshot tests with unusual diacritics, which are | |
# supposed to be covered by STIXGeneral. | |
tools: fonts-stix | |
- uses: actions/checkout@v4 | |
with: | |
repository: matrix-org/matrix-react-sdk | |
- uses: actions/setup-node@v3 | |
with: | |
cache: 'yarn' | |
- name: Fetch layered build | |
run: scripts/ci/layered.sh | |
- name: Copy config | |
run: cp element.io/develop/config.json config.json | |
working-directory: ./element-web | |
- name: Build | |
env: | |
CI_PACKAGE: true | |
NODE_OPTIONS: "--openssl-legacy-provider" | |
run: yarn build | |
working-directory: ./element-web | |
- name: Edit Test Config | |
run: | | |
sed -i '/HOMESERVER/c\ HOMESERVER: "dendrite",' cypress.config.ts | |
- name: "Run cypress tests" | |
uses: cypress-io/[email protected] | |
with: | |
browser: chrome | |
start: npx serve -p 8080 ./element-web/webapp | |
wait-on: 'http://localhost:8080' | |
env: | |
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true | |
TMPDIR: ${{ runner.temp }} | |
element-web-pinecone: | |
if: ${{ false }} # disable for now, as Cypress has been replaced by Playwright | |
timeout-minutes: 120 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: tecolicom/actions-use-apt-tools@v1 | |
with: | |
# Our test suite includes some screenshot tests with unusual diacritics, which are | |
# supposed to be covered by STIXGeneral. | |
tools: fonts-stix | |
- uses: actions/checkout@v4 | |
with: | |
repository: matrix-org/matrix-react-sdk | |
- uses: actions/setup-node@v3 | |
with: | |
cache: 'yarn' | |
- name: Fetch layered build | |
run: scripts/ci/layered.sh | |
- name: Copy config | |
run: cp element.io/develop/config.json config.json | |
working-directory: ./element-web | |
- name: Build | |
env: | |
CI_PACKAGE: true | |
NODE_OPTIONS: "--openssl-legacy-provider" | |
run: yarn build | |
working-directory: ./element-web | |
- name: Edit Test Config | |
run: | | |
sed -i '/HOMESERVER/c\ HOMESERVER: "dendritePinecone",' cypress.config.ts | |
- name: "Run cypress tests" | |
uses: cypress-io/[email protected] | |
with: | |
browser: chrome | |
start: npx serve -p 8080 ./element-web/webapp | |
wait-on: 'http://localhost:8080' | |
env: | |
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true | |
TMPDIR: ${{ runner.temp }} |