Test #3738
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: Test | |
on: | |
pull_request: | |
push: | |
branches: | |
- master | |
- release/* | |
workflow_dispatch: | |
defaults: | |
run: | |
shell: bash | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
permissions: | |
contents: read | |
jobs: | |
discover: | |
name: Discover Test Groups | |
runs-on: ubuntu-latest | |
outputs: | |
groups: ${{ steps.test.outputs.groups }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'recursive' | |
fetch-depth: 0 | |
- id: test | |
run: | | |
echo "groups<<EOF" >> $GITHUB_OUTPUT | |
go run ./cmd/ci/main.go --json list-test-groups | jq -r '.msg' | tee -a $GITHUB_OUTPUT | |
echo "EOF" >> $GITHUB_OUTPUT | |
cache: | |
name: Cache Dependencies | |
runs-on: ubuntu-latest | |
outputs: | |
fetch_params_key: ${{ steps.fetch_params.outputs.key }} | |
fetch_params_path: ${{ steps.fetch_params.outputs.path }} | |
make_deps_key: ${{ steps.make_deps.outputs.key }} | |
make_deps_path: ${{ steps.make_deps.outputs.path }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'recursive' | |
fetch-depth: 0 | |
- id: fetch_params | |
env: | |
CACHE_KEY: fetch-params-${{ hashFiles('./extern/filecoin-ffi/parameters.json') }} | |
CACHE_PATH: | | |
/var/tmp/filecoin-proof-parameters/ | |
run: | | |
echo -e "key=$CACHE_KEY" | tee -a $GITHUB_OUTPUT | |
echo -e "path<<EOF\n$CACHE_PATH\nEOF" | tee -a $GITHUB_OUTPUT | |
- id: make_deps | |
env: | |
CACHE_KEY: ${{ runner.os }}-${{ runner.arch }}-make-deps-${{ hashFiles('./.git/modules/extern/filecoin-ffi/HEAD') }}-p | |
CACHE_PATH: | | |
./extern/filecoin-ffi/filcrypto.h | |
./extern/filecoin-ffi/libfilcrypto.a | |
./extern/filecoin-ffi/filcrypto.pc | |
run: | | |
echo -e "key=$CACHE_KEY" | tee -a $GITHUB_OUTPUT | |
echo -e "path<<EOF\n$CACHE_PATH\nEOF" | tee -a $GITHUB_OUTPUT | |
- id: restore_fetch_params | |
uses: actions/cache/restore@v4 | |
with: | |
key: ${{ steps.fetch_params.outputs.key }} | |
path: ${{ steps.fetch_params.outputs.path }} | |
lookup-only: true | |
- id: restore_make_deps | |
uses: actions/cache/restore@v4 | |
with: | |
key: ${{ steps.make_deps.outputs.key }} | |
path: ${{ steps.make_deps.outputs.path }} | |
lookup-only: true | |
- if: steps.restore_fetch_params.outputs.cache-hit != 'true' || steps.restore_make_deps.outputs.cache-hit != 'true' | |
uses: ./.github/actions/install-system-dependencies | |
- if: steps.restore_fetch_params.outputs.cache-hit != 'true' || steps.restore_make_deps.outputs.cache-hit != 'true' | |
uses: ./.github/actions/install-go | |
- if: steps.restore_fetch_params.outputs.cache-hit != 'true' || steps.restore_make_deps.outputs.cache-hit != 'true' | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
run: FFI_PORTABLE=1 make deps | |
- if: steps.restore_fetch_params.outputs.cache-hit != 'true' | |
run: make lotus | |
- if: steps.restore_fetch_params.outputs.cache-hit != 'true' | |
run: ./lotus fetch-params 2048 | |
- if: steps.restore_fetch_params.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
key: ${{ steps.fetch_params.outputs.key }} | |
path: ${{ steps.fetch_params.outputs.path }} | |
- if: steps.restore_make_deps.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v4 | |
with: | |
key: ${{ steps.make_deps.outputs.key }} | |
path: ${{ steps.make_deps.outputs.path }} | |
test: | |
needs: [discover, cache] | |
name: Test (${{ matrix.name }}) ${{ toJson(matrix.runner) }} | |
runs-on: ${{ matrix.runner }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: ${{ fromJson(needs.discover.outputs.groups) }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'recursive' | |
fetch-depth: 0 | |
- uses: ./.github/actions/install-system-dependencies | |
- uses: ./.github/actions/install-go | |
- id: group | |
run: | | |
echo "metadata<<EOF" >> $GITHUB_OUTPUT | |
go run ./cmd/ci/main.go --json get-test-group-metadata --name "${{ matrix.name }}" | jq -r '.msg' | tee -a $GITHUB_OUTPUT | |
echo "EOF" >> $GITHUB_OUTPUT | |
- name: Install gotestsum | |
run: go install gotest.tools/gotestsum@latest | |
- name: Restore cached make deps outputs | |
uses: actions/cache/restore@v4 | |
with: | |
key: ${{ needs.cache.outputs.make_deps_key }} | |
path: ${{ needs.cache.outputs.make_deps_path }} | |
fail-on-cache-miss: true | |
- if: ${{ fromJson(steps.group.outputs.metadata).needs_parameters }} | |
name: Restore cached fetch params outputs | |
uses: actions/cache/restore@v4 | |
with: | |
key: ${{ needs.cache.outputs.fetch_params_key }} | |
path: ${{ needs.cache.outputs.fetch_params_path }} | |
fail-on-cache-miss: true | |
# TODO: Install statediff (used to be used for conformance) | |
- name: Create temporary directory for reports | |
id: reports | |
run: mktemp -d | xargs -0 -I{} echo "path={}" | tee -a $GITHUB_OUTPUT | |
# TODO: Track coverage (used to be tracked for conformance) | |
- name: Run tests | |
env: | |
NAME: ${{ matrix.name }} | |
LOTUS_SRC_DIR: ${{ github.workspace }} | |
REPORTS_PATH: ${{ steps.reports.outputs.path }} | |
SKIP_CONFORMANCE: ${{ fromJson(steps.group.outputs.metadata).skip_conformance || '1' }} | |
TEST_RUSTPROOFS_LOGS: ${{ fromJson(steps.group.outputs.metadata).test_rustproofs_logs || '0' }} | |
FORMAT: ${{ fromJson(steps.group.outputs.metadata).format || 'standard-verbose' }} | |
PACKAGES: ${{ join(fromJson(steps.group.outputs.metadata).packages, ' ') }} | |
run: | | |
gotestsum \ | |
--format "$FORMAT" \ | |
--junitfile "$REPORTS_PATH/$NAME.xml" \ | |
--jsonfile "$REPORTS_PATH/$NAME.json" \ | |
--packages="$PACKAGES" \ | |
-- ${{ fromJson(steps.group.outputs.metadata).go_test_flags || '' }} | |
- name: Modify junit.xml for BuildPulse | |
env: | |
NAME: ${{ matrix.name }} | |
REPORTS_PATH: ${{ steps.reports.outputs.path }} | |
PACKAGES: ${{ join(fromJson(steps.group.outputs.metadata).packages, ' ') }} | |
if: always() | |
run: | | |
# Modify test suite name and classname attributes in JUnit XML for better grouping | |
# in BuildPulse. itests are run with go test ./itests/file_test.go and therefore Go | |
# assigns the name and classname attributes to "command-line-arguments". Others get the | |
# package name for both. | |
if [[ "${{ matrix.name }}" == itest-* ]]; then | |
PACKAGE_NAME=$(basename "$PACKAGES" .go) | |
sed -i 's/ name="command-line-arguments"/ name="itests"/g' "$REPORTS_PATH/$NAME.xml" | |
sed -i 's/classname="command-line-arguments"/classname="'"$PACKAGE_NAME"'"/g' "$REPORTS_PATH/$NAME.xml" | |
else | |
sed -i 's# name="github.com/filecoin-project/lotus/\(.*\)"# name="'${{ matrix.name }}':\1"#g' "$REPORTS_PATH/$NAME.xml" | |
fi | |
cat "$REPORTS_PATH/$NAME.xml" | |
- if: success() || failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.name }}-${{ runner.os }}-${{ runner.arch }} | |
path: | | |
${{ steps.reports.outputs.path }}/${{ matrix.name }}.xml | |
${{ steps.reports.outputs.path }}/${{ matrix.name }}.json | |
continue-on-error: true |