diff --git a/.github/package-filters/js-packages-direct.yml b/.github/package-filters/js-packages-direct.yml new file mode 100644 index 0000000000..c4efc00274 --- /dev/null +++ b/.github/package-filters/js-packages-direct.yml @@ -0,0 +1,47 @@ +'@dashevo/wallet-utils-contract': + - packages/wallet-utils-contract/** + +'@dashevo/token-history-contract': + - packages/token-history-contract/** + +'@dashevo/dashpay-contract': + - packages/dashpay-contract/** + +'@dashevo/masternode-reward-shares-contract': + - packages/masternode-reward-shares-contract/** + +'@dashevo/withdrawals-contract': + - packages/withdrawals-contract/** + +'@dashevo/dpns-contract': + - packages/dpns-contract/** + +'@dashevo/grpc-common': + - packages/js-grpc-common/** + +'@dashevo/wasm-dpp': + - packages/wasm-dpp/** + +'@dashevo/dapi-grpc': + - packages/dapi-grpc/** + +'@dashevo/dash-spv': + - packages/dash-spv/** + +'@dashevo/dapi': + - packages/dapi/** + +'@dashevo/dapi-client': + - packages/js-dapi-client/** + +'@dashevo/wallet-lib': + - packages/wallet-lib/** + +dash: + - packages/js-dash-sdk/** + +dashmate: + - packages/dashmate/** + +'@dashevo/platform-test-suite': + - packages/platform-test-suite/** diff --git a/.github/package-filters/js-packages-no-workflows.yml b/.github/package-filters/js-packages-no-workflows.yml new file mode 100644 index 0000000000..bb0ca7da81 --- /dev/null +++ b/.github/package-filters/js-packages-no-workflows.yml @@ -0,0 +1,79 @@ +'@dashevo/wallet-utils-contract': &wallet-utils-contract + - packages/wallet-utils-contract/** + +'@dashevo/token-history-contract': &token-history-contract + - packages/token-history-contract/** + +'@dashevo/dashpay-contract': &dashpay-contract + - packages/dashpay-contract/** + +'@dashevo/masternode-reward-shares-contract': &masternode-reward-shares-contract + - packages/masternode-reward-shares-contract/** + +'@dashevo/withdrawals-contract': &withdrawals-contract + - packages/withdrawals-contract/** + +'@dashevo/dpns-contract': &dpns-contract + - packages/dpns-contract/** + +'@dashevo/grpc-common': &grpc-common + - packages/js-grpc-common/** + +'@dashevo/wasm-dpp': &wasm-dpp + - packages/wasm-dpp/** + - *dashpay-contract + - *masternode-reward-shares-contract + - *dpns-contract + - *withdrawals-contract + - *wallet-utils-contract + - *token-history-contract + - packages/rs-platform-serialization/** + - packages/rs-platform-serialization-derive/** + - packages/rs-platform-value/** + - packages/rs-platform-value-convertible/** + - packages/rs-platform-version/** + - packages/rs-platform-versioning/** + - packages/rs-dpp/** + +'@dashevo/dapi-grpc': &dapi-grpc + - packages/dapi-grpc/** + - *grpc-common + +'@dashevo/dash-spv': &dash-spv + - packages/dash-spv/** + +'@dashevo/dapi': + - packages/dapi/** + - *wasm-dpp + - *dapi-grpc + - *dash-spv + +'@dashevo/dapi-client': &dapi-client + - packages/js-dapi-client/** + - *dapi-grpc + - *dash-spv + - *wasm-dpp + +'@dashevo/wallet-lib': &wallet-lib + - packages/wallet-lib/** + - *dapi-client + - *wasm-dpp + +dash: &dash + - packages/js-dash-sdk/** + - *dapi-client + - *wallet-lib + +dashmate: + - packages/dashmate/** + - *dashpay-contract + - *masternode-reward-shares-contract + - *dpns-contract + - *withdrawals-contract + - *token-history-contract + - *wallet-lib + - *dapi-client + +'@dashevo/platform-test-suite': + - packages/platform-test-suite/** + - *dash diff --git a/.github/package-filters/rs-packages-direct.yml b/.github/package-filters/rs-packages-direct.yml new file mode 100644 index 0000000000..0d2d079b40 --- /dev/null +++ b/.github/package-filters/rs-packages-direct.yml @@ -0,0 +1,44 @@ +wallet-utils-contract: + - packages/wallet-utils-contract/** + +token-history-contract: + - packages/token-history-contract/** + +dashpay-contract: + - packages/dashpay-contract/** + +masternode-reward-shares-contract: + - packages/masternode-reward-shares-contract/** + +withdrawals-contract: + - packages/withdrawals-contract/** + +dpns-contract: + - packages/dpns-contract/** + +json-schema-compatibility-validator: + - packages/rs-json-schema-compatibility-validator/** + +dpp: + - packages/rs-dpp/** + +wasm-dpp: + - packages/wasm-dpp/** + +drive: + - packages/rs-drive/** + +drive-abci: + - packages/rs-drive-abci/** + +dapi-grpc: + - packages/dapi-grpc/** + +rs-dapi-client: + - packages/rs-dapi-client/** + +dash-sdk: + - packages/rs-sdk/** + +rs-sdk-ffi: + - packages/rs-sdk-ffi/** diff --git a/.github/package-filters/rs-packages-no-workflows.yml b/.github/package-filters/rs-packages-no-workflows.yml new file mode 100644 index 0000000000..54417389b1 --- /dev/null +++ b/.github/package-filters/rs-packages-no-workflows.yml @@ -0,0 +1,70 @@ +wallet-utils-contract: &wallet-utils-contract + - packages/wallet-utils-contract/** + +token-history-contract: &token-history-contract + - packages/token-history-contract/** + +dashpay-contract: &dashpay-contract + - packages/dashpay-contract/** + +masternode-reward-shares-contract: &masternode-reward-shares-contract + - packages/masternode-reward-shares-contract/** + +withdrawals-contract: &withdrawals-contract + - packages/withdrawals-contract/** + +dpns-contract: &dpns-contract + - packages/dpns-contract/** + +json-schema-compatibility-validator: &json-schema-compatibility-validator + - packages/rs-json-schema-compatibility-validator/** + +dpp: &dpp + - packages/rs-dpp/** + - *dashpay-contract + - *masternode-reward-shares-contract + - *dpns-contract + - *withdrawals-contract + - *wallet-utils-contract + - *token-history-contract + - *json-schema-compatibility-validator + - packages/rs-platform-serialization/** + - packages/rs-platform-serialization-derive/** + - packages/rs-platform-value/** + - packages/rs-platform-value-convertible/** + - packages/rs-platform-version/** + - packages/rs-platform-versioning/** + +wasm-dpp: + - packages/wasm-dpp/** + - *dpp + +drive: &drive + - packages/rs-drive/** + - *dpp + +drive-abci: + - packages/rs-drive-abci/** + - *drive + +dapi-grpc: &dapi_grpc + - packages/rs-platform-version/** + - packages/rs-dapi-grpc-macros/** + - packages/dapi-grpc/** + +rs-dapi-client: &dapi_client + - packages/rs-dapi-client/** + - *dapi_grpc + +dash-sdk: + - packages/rs-drive-proof-verifier/** + - packages/rs-sdk/** + - *dapi_client + - *drive + +rs-sdk-ffi: + - packages/rs-sdk-ffi/** + - packages/rs-sdk/** + - packages/rs-drive-proof-verifier/** + - *dapi_client + - *drive diff --git a/.github/package-filters/test-suite-triggers.yml b/.github/package-filters/test-suite-triggers.yml new file mode 100644 index 0000000000..2ee579da98 --- /dev/null +++ b/.github/package-filters/test-suite-triggers.yml @@ -0,0 +1,32 @@ +run: + - packages/platform-test-suite/** + - packages/dashmate/** + - packages/dapi/** + - packages/js-dash-sdk/** + - packages/js-dapi-client/** + - packages/wasm-dpp/** + - packages/dapi-grpc/** + - packages/js-grpc-common/** + - packages/dash-spv/** + - packages/wallet-lib/** + # Rust core components that affect local network behavior + - packages/rs-dpp/** + - packages/rs-drive/** + - packages/rs-drive-abci/** + - packages/rs-dapi-client/** + - packages/rs-platform-serialization/** + - packages/rs-platform-serialization-derive/** + - packages/rs-platform-value/** + - packages/rs-platform-value-convertible/** + - packages/rs-platform-version/** + - packages/rs-platform-versioning/** + # System contracts used by validations + - packages/dashpay-contract/** + - packages/masternode-reward-shares-contract/** + - packages/dpns-contract/** + - packages/withdrawals-contract/** + - packages/token-history-contract/** + - packages/wallet-utils-contract/** + # Local network scripts and action + - .github/actions/local-network/** + - scripts/** diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 7c13a960dc..a72b531e1f 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -32,6 +32,7 @@ jobs: # Configure which scopes are allowed (newline-delimited). # These are regex patterns auto-wrapped in `^ $`. scopes: | + ci dapi platform drive @@ -39,14 +40,15 @@ jobs: dpp dashmate contract - sdk + rs-sdk + rs-sdk-ffi + swift-sdk strategy-tests simple-signer wallet-lib test-suite bench-suite release - dash-spv wasm-sdk requireScope: false # Configure additional validation for the subject based on a regex. diff --git a/.github/workflows/tests-js-package.yml b/.github/workflows/tests-js-package.yml index a2bf39a47b..c3152957b8 100644 --- a/.github/workflows/tests-js-package.yml +++ b/.github/workflows/tests-js-package.yml @@ -5,6 +5,10 @@ on: description: The package name to run tests for type: string required: true + direct-packages: + description: JSON array of JS packages that changed directly + type: string + default: '[]' skip-tests: description: Skip running tests type: boolean @@ -19,6 +23,7 @@ jobs: name: Linting runs-on: ubuntu-24.04 timeout-minutes: 5 + if: contains(fromJSON(inputs.direct-packages), inputs.package) permissions: id-token: write contents: read diff --git a/.github/workflows/tests-rs-package.yml b/.github/workflows/tests-rs-package.yml index b52e2bd8bf..d644f2a40a 100644 --- a/.github/workflows/tests-rs-package.yml +++ b/.github/workflows/tests-rs-package.yml @@ -9,11 +9,16 @@ on: description: If true, try to build each individual feature for this crate type: boolean default: false + direct-packages: + description: JSON array of packages that changed directly (not via deps) + type: string + default: '[]' jobs: lint: name: Linting runs-on: ubuntu-24.04 + if: contains(fromJSON(inputs.direct-packages), inputs.package) permissions: id-token: write contents: read @@ -51,6 +56,7 @@ jobs: formatting: name: Formatting runs-on: ubuntu-24.04 + if: contains(fromJSON(inputs.direct-packages), inputs.package) timeout-minutes: 5 steps: - name: Check out repo @@ -71,6 +77,7 @@ jobs: unused_deps: name: Unused dependencies runs-on: ubuntu-24.04 + if: contains(fromJSON(inputs.direct-packages), inputs.package) permissions: id-token: write contents: read @@ -113,10 +120,7 @@ jobs: name: Detect immutable structure changes timeout-minutes: 10 runs-on: ubuntu-24.04 - # FIXME: as we use `gh pr view` below, this check can only - # run on pull requests. We should find a way to run it - # when manual triggers are used. - if: github.event_name == 'pull_request' + if: github.event_name == 'pull_request' && contains(fromJSON(inputs.direct-packages), inputs.package) steps: - name: Checkout base commit uses: actions/checkout@v4 @@ -207,7 +211,7 @@ jobs: name: Check each feature runs-on: ubuntu-24.04 timeout-minutes: 15 - if: ${{ inputs.check-each-feature }} + if: ${{ inputs.check-each-feature && contains(fromJSON(inputs.direct-packages), inputs.package) }} steps: - name: Check out repo uses: actions/checkout@v4 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0c14f5a8db..353cc0b7ae 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -25,22 +25,41 @@ jobs: runs-on: ubuntu-24.04 outputs: js-packages: ${{ steps.filter-js.outputs.changes }} + js-packages-direct: ${{ steps.filter-js-direct.outputs.changes }} rs-packages: ${{ steps.filter-rs.outputs.changes }} + rs-packages-direct: ${{ steps.filter-rs-direct.outputs.changes }} + test-suite: ${{ steps.filter-test-suite.outputs.run }} steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: dorny/paths-filter@v2 + - uses: dorny/paths-filter@v3 id: filter-js with: - filters: .github/package-filters/js-packages.yml + filters: .github/package-filters/js-packages-no-workflows.yml - - uses: dorny/paths-filter@v2 + - uses: dorny/paths-filter@v3 + id: filter-js-direct + with: + filters: .github/package-filters/js-packages-direct.yml + + - uses: dorny/paths-filter@v3 id: filter-rs with: - filters: .github/package-filters/rs-packages.yml + filters: .github/package-filters/rs-packages-no-workflows.yml + + - uses: dorny/paths-filter@v3 + id: filter-rs-direct + with: + filters: .github/package-filters/rs-packages-direct.yml + + - name: Check if Test Suite should run + id: filter-test-suite + uses: dorny/paths-filter@v3 + with: + filters: .github/package-filters/test-suite-triggers.yml build-js: name: Build JS packages @@ -84,6 +103,7 @@ jobs: with: package: ${{ matrix.rs-package }} check-each-feature: ${{ contains(fromJSON('["dash-sdk","rs-dapi-client","dapi-grpc","dpp","drive-abci"]'), matrix.rs-package) }} + direct-packages: ${{ needs.changes.outputs.rs-packages-direct }} rs-crates-security: name: Rust crates security audit @@ -122,6 +142,7 @@ jobs: package: ${{ matrix.js-package }} test-command: ${{ matrix.js-package == 'dashmate' && 'test:unit' || 'test' }} skip-tests: ${{ contains(matrix.js-package, 'platform-test-suite') }} + direct-packages: ${{ needs.changes.outputs.js-packages-direct }} js-deps-versions: name: JS dependency versions check @@ -194,7 +215,9 @@ jobs: needs: - build-js - build-images + - changes secrets: inherit + if: needs.changes.outputs.test-suite == 'true' strategy: fail-fast: false matrix: @@ -223,5 +246,7 @@ jobs: needs: - build-js - build-images + - changes secrets: inherit + if: needs.changes.outputs.test-suite == 'true' uses: ./.github/workflows/tests-packges-functional.yml