diff --git a/.github/composites/setup-defradb/action.yml b/.github/composites/setup-defradb/action.yml index 6c0b96388e..23e9c831f4 100644 --- a/.github/composites/setup-defradb/action.yml +++ b/.github/composites/setup-defradb/action.yml @@ -17,55 +17,54 @@ runs: using: "composite" steps: - - name: Setup Go environment explicitly - uses: actions/setup-go@v5 - with: - go-version-file: 'go.mod' - check-latest: true - cache: false + - name: Setup Go environment explicitly + uses: actions/setup-go@v5 + with: + go-version-file: 'go.mod' + check-latest: true + cache: false - - name: Set cache paths - id: cache-paths - shell: bash # It's required for run step to specify shell in a composite action. - run: | - echo "GO_CACHE=$(go env GOCACHE)" >> "${GITHUB_OUTPUT}" - echo "GO_MODCACHE=$(go env GOMODCACHE)" >> "${GITHUB_OUTPUT}" - echo "CARGO_CACHE=~/.cargo" >> "${GITHUB_OUTPUT}" + - name: Set cache paths + id: cache-paths + shell: bash # It's required for run step to specify shell in a composite action. + run: | + echo "GO_CACHE=$(go env GOCACHE)" >> "${GITHUB_OUTPUT}" + echo "GO_MODCACHE=$(go env GOMODCACHE)" >> "${GITHUB_OUTPUT}" + echo "CARGO_CACHE=~/.cargo" >> "${GITHUB_OUTPUT}" - - name: Go cache/restore - uses: actions/cache@v4 - with: - key: ${{ runner.os }}-go-${{ hashFiles('**/go.mod') }} - path: | - ${{ steps.cache-paths.outputs.GO_CACHE }} - ${{ steps.cache-paths.outputs.GO_MODCACHE }} + - name: Go cache/restore + uses: actions/cache@v4 + with: + key: ${{ runner.os }}-go-${{ hashFiles('**/go.mod') }} + path: | + ${{ steps.cache-paths.outputs.GO_CACHE }} + ${{ steps.cache-paths.outputs.GO_MODCACHE }} - - name: Cargo cache/restore - # A very cool post: https://blog.arriven.wtf/posts/rust-ci-cache - uses: actions/cache@v4 - with: - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }} - # Here are some directories we shouldn't forget about: - # ~/.cargo/.* - # ~/.cargo/bin/ - # ~/.cargo/git/db/ - # ~/.cargo/registry/cache/ - # ~/.cargo/registry/index/ - # **/target/*/*.d - # **/target/*/*.rlib - # **/target/*/.fingerprint - # **/target/*/build - # **/target/*/deps - path: | - ${{ steps.cache-paths.outputs.CARGO_CACHE }} - **/target/ + - name: Cargo cache/restore + # A very cool post: https://blog.arriven.wtf/posts/rust-ci-cache + uses: actions/cache@v4 + with: + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }} + # Here are some directories we shouldn't forget about: + # ~/.cargo/.* + # ~/.cargo/bin/ + # ~/.cargo/git/db/ + # ~/.cargo/registry/cache/ + # ~/.cargo/registry/index/ + # **/target/*/*.d + # **/target/*/*.rlib + # **/target/*/.fingerprint + # **/target/*/build + # **/target/*/deps + path: | + ${{ steps.cache-paths.outputs.CARGO_CACHE }} + **/target/ - - name: Restore modified time - uses: chetan/git-restore-mtime-action@v2 - - - name: Build dependencies - shell: bash # It's required for run step to specify shell in a composite action. - run: | - make deps:modules - make deps:test + - name: Restore modified time + uses: chetan/git-restore-mtime-action@v2 + - name: Build dependencies + shell: bash # It's required for run step to specify shell in a composite action. + run: | + make deps:modules + make deps:test diff --git a/.github/composites/test-coverage-with-artifact/action.yml b/.github/composites/test-coverage-with-artifact/action.yml new file mode 100644 index 0000000000..9d8983a005 --- /dev/null +++ b/.github/composites/test-coverage-with-artifact/action.yml @@ -0,0 +1,44 @@ +# Copyright 2024 Democratized Data Foundation +# +# Use of this software is governed by the Business Source License +# included in the file licenses/BSL.txt. +# +# As of the Change Date specified in that file, in accordance with +# the Business Source License, use of this software will be governed +# by the Apache License, Version 2.0, included in the file +# licenses/APL.txt. + +name: 'Test Coverage And Save Artifact' + +description: 'Composite action to run the test with coverage and save the report as artifact' + +inputs: + coverage-artifact-name: + description: 'Name of the artifact that will save coverage report' + required: true + default: 'coverage_default' + + coverage-path: + description: 'Path to coverage file' + required: false + default: 'coverage.txt' + +runs: + # This is a composite action, setting this is required. + using: "composite" + + steps: + - name: Run integration tests + shell: bash # It's required for run step to specify shell in a composite action. + run: make test:coverage + + - name: Upload coverage artifact + uses: actions/upload-artifact@v4 + with: + # Make sure the name is always unique per job as artifacts are now immutable. + # Note Issue: https://github.com/actions/upload-artifact/issues/478 + # Solve: https://github.com/actions/upload-artifact/issues/478#issuecomment-1885470013 + name: ${{ inputs.coverage-artifact-name }} + path: ${{ inputs.coverage-path }} + if-no-files-found: error + retention-days: 7 diff --git a/.github/workflows/test-and-upload-coverage.yml b/.github/workflows/test-and-upload-coverage.yml index d59adb4c83..0dd233b5d2 100644 --- a/.github/workflows/test-and-upload-coverage.yml +++ b/.github/workflows/test-and-upload-coverage.yml @@ -60,7 +60,7 @@ jobs: fail-fast: false matrix: client-type: [go, http, cli] - database-type: [badger-file, badger-memory] + database-type: [file, memory] mutation-type: [gql, collection-named, collection-save] runs-on: ubuntu-latest @@ -70,8 +70,8 @@ jobs: DEFRA_CLIENT_GO: ${{ matrix.client-type == 'go' }} DEFRA_CLIENT_HTTP: ${{ matrix.client-type == 'http' }} DEFRA_CLIENT_CLI: ${{ matrix.client-type == 'cli' }} - DEFRA_BADGER_MEMORY: ${{ matrix.database-type == 'badger-memory' }} - DEFRA_BADGER_FILE: ${{ matrix.database-type == 'badger-file' }} + DEFRA_BADGER_MEMORY: ${{ matrix.database-type == 'memory' }} + DEFRA_BADGER_FILE: ${{ matrix.database-type == 'file' }} DEFRA_MUTATION_TYPE: ${{ matrix.mutation-type }} @@ -82,23 +82,15 @@ jobs: - name: Setup defradb uses: ./.github/composites/setup-defradb - - name: Run integration tests - run: make test:coverage - - - name: Upload coverage artifact - uses: actions/upload-artifact@v4 + - name: Test coverage & save coverage report in an artifact + uses: ./.github/composites/test-coverage-with-artifact with: - # Make sure the name is always unique per job as artifacts are now immutable. - # Note Issue: https://github.com/actions/upload-artifact/issues/478 - # Solve: https://github.com/actions/upload-artifact/issues/478#issuecomment-1885470013 - name: "coverage_basic\ + coverage-artifact-name: "coverage_basic\ _${{ matrix.client-type }}\ _${{ matrix.database-type }}\ _${{ matrix.mutation-type }}\ " - path: coverage.txt - if-no-files-found: error - retention-days: 7 + coverage-path: coverage.txt # This job runs the tests on other operating systems using default configurations. test-os: @@ -122,36 +114,27 @@ jobs: - name: Setup defradb uses: ./.github/composites/setup-defradb - - name: Run integration tests - run: make test:coverage - - - name: Upload coverage artifact - uses: actions/upload-artifact@v4 + - name: Test coverage & save coverage report in an artifact + uses: ./.github/composites/test-coverage-with-artifact with: - # Make sure the name is always unique per job as artifacts are now immutable. - # Note Issue: https://github.com/actions/upload-artifact/issues/478 - # Solve: https://github.com/actions/upload-artifact/issues/478#issuecomment-1885470013 - name: "coverage_os\ - _${{ matrix.os }}\ - " - path: coverage.txt - if-no-files-found: error - retention-days: 7 + coverage-artifact-name: "coverage_os_${{ matrix.os }}" + coverage-path: coverage.txt - # The source-hub matrix job tests the combinations of source-hub acp and client types on linux. - test-source-hub: - name: Test source-hub job + # The acp matrix job tests the combinations of source-hub acp and client types on linux. + test-acp: + name: Test acp job strategy: fail-fast: false matrix: client-type: [go, http, cli] + acp-type: [source-hub] runs-on: ubuntu-latest env: - DEFRA_ACP_TYPE: source-hub + DEFRA_ACP_TYPE: ${{ matrix.acp-type }} DEFRA_CLIENT_GO: ${{ matrix.client-type == 'go' }} DEFRA_CLIENT_HTTP: ${{ matrix.client-type == 'http' }} DEFRA_CLIENT_CLI: ${{ matrix.client-type == 'cli' }} @@ -178,21 +161,14 @@ jobs: working-directory: _sourceHub run: make install - - name: Run integration tests - run: make test:coverage - - - name: Upload coverage artifact - uses: actions/upload-artifact@v4 + - name: Test coverage & save coverage report in an artifact + uses: ./.github/composites/test-coverage-with-artifact with: - # Make sure the name is always unique per job as artifacts are now immutable. - # Note Issue: https://github.com/actions/upload-artifact/issues/478 - # Solve: https://github.com/actions/upload-artifact/issues/478#issuecomment-1885470013 - name: "coverage_source-hub\ + coverage-artifact-name: "coverage_acp\ + _${{ matrix.acp-type }}\ _${{ matrix.client-type }}\ " - path: coverage.txt - if-no-files-found: error - retention-days: 7 + coverage-path: coverage.txt # The lens matrix job tests the wazero and wasmer lens on linux. test-lens: @@ -215,21 +191,11 @@ jobs: - name: Setup defradb uses: ./.github/composites/setup-defradb - - name: Run integration tests - run: make test:coverage - - - name: Upload coverage artifact - uses: actions/upload-artifact@v4 + - name: Test coverage & save coverage report in an artifact + uses: ./.github/composites/test-coverage-with-artifact with: - # Make sure the name is always unique per job as artifacts are now immutable. - # Note Issue: https://github.com/actions/upload-artifact/issues/478 - # Solve: https://github.com/actions/upload-artifact/issues/478#issuecomment-1885470013 - name: "coverage_lens\ - _${{ matrix.lens-type }}\ - " - path: coverage.txt - if-no-files-found: error - retention-days: 7 + coverage-artifact-name: "coverage_lens_${{ matrix.lens-type }}" + coverage-path: coverage.txt # This job runs the database with encryption tests using default configuration, on linux. test-encryption: @@ -247,23 +213,15 @@ jobs: - name: Setup defradb uses: ./.github/composites/setup-defradb - - name: Run integration tests - run: make test:coverage - - - name: Upload coverage artifact - uses: actions/upload-artifact@v4 + - name: Test coverage & save coverage report in an artifact + uses: ./.github/composites/test-coverage-with-artifact with: - # Make sure the name is always unique per job as artifacts are now immutable. - # Note Issue: https://github.com/actions/upload-artifact/issues/478 - # Solve: https://github.com/actions/upload-artifact/issues/478#issuecomment-1885470013 - name: "coverage_encryption" - path: coverage.txt - if-no-files-found: error - retention-days: 7 + coverage-artifact-name: "coverage_encryption" + coverage-path: coverage.txt # This job runs the materialized view tests using default configuration, on linux. - test-materialized: - name: Test materialized job + test-view: + name: Test view job runs-on: ubuntu-latest @@ -277,19 +235,11 @@ jobs: - name: Setup defradb uses: ./.github/composites/setup-defradb - - name: Run integration tests - run: make test:coverage - - - name: Upload coverage artifact - uses: actions/upload-artifact@v4 + - name: Test coverage & save coverage report in an artifact + uses: ./.github/composites/test-coverage-with-artifact with: - # Make sure the name is always unique per job as artifacts are now immutable. - # Note Issue: https://github.com/actions/upload-artifact/issues/478 - # Solve: https://github.com/actions/upload-artifact/issues/478#issuecomment-1885470013 - name: "coverage_materialized" - path: coverage.txt - if-no-files-found: error - retention-days: 7 + coverage-artifact-name: "coverage_view_materialized" + coverage-path: coverage.txt ## This job gathers all the coverage reports and uploads them to code-cov @@ -298,11 +248,11 @@ jobs: needs: - test-basic # 18 test(s) - - test-source-hub # 3 test(s) + - test-os # 1 test(s) [excluding windows] + - test-acp # 3 test(s) - test-lens # 2 test(s) - test-encryption # 1 test(s) - - test-materialized # 1 test(s) - - test-os # 1 test(s) + - test-view # 1 test(s) # Important to know: # - We didn't use `if: always()` here, so this job doesn't run if we manually canceled.