diff --git a/.github/.agents/bottleneck.md b/.github/.agents/bottleneck.md new file mode 100644 index 00000000000..e8aece8c5fe --- /dev/null +++ b/.github/.agents/bottleneck.md @@ -0,0 +1,346 @@ +# Integration Tests + +| | | +|---|---| +| **State** | failure | +| **Actor** | kalverra | +| **Cost** | $1.16 | +| **Logs** | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346 | + +> **Queue Time Finding:** Median queue 28s × 63 jobs ≈ 29m0s runner-time waiting. + +## pull_request — 10m0s, $1.16 (2026-08-13T16:56:31 to 2026-08-13T17:06:31) + +### Runs (63 items) + +| Name | Job ID | Runner | Queue Time | Cost | Duration | Status | Log Path | +|------|--------|--------|------------|------|----------|--------|----------| +| Run Core CRE E2E Tests / Test_CRE_V2_Suite_Bucket_C (workflow-gateway-capabilities) | `94526005664` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 26s | $0.03 | 6m2s | failure | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005664.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Suite_Bucket_B (workflow-gateway-capabilities-vault-optimizations-enabled) | `94526005717` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 26s | $0.03 | 5m41s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005717.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Suite_Bucket_B (workflow-gateway-capabilities) | `94526005871` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 27s | $0.03 | 5m20s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005871.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Sharding (workflow-gateway-sharded) | `94526005807` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 28s | $0.03 | 5m16s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005807.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Solana_LogTrigger (workflow) | `94526005773` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 42s | $0.03 | 5m2s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005773.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Suite_Bucket_B (workflow-gateway-capabilities-vault-jwt_auth-enabled) | `94526005824` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 26s | $0.03 | 4m56s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005824.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Aptos_Suite (workflow-gateway-aptos) | `94526005993` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 42s | $0.03 | 4m34s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005993.log | +| Run Core CRE Mixed-Env Tests / Test_CRE_V2_Suite_Bucket_B (mixed-env) | `94525980028` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 26s | $0.03 | 4m33s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525980028.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_Stellar_Regression | `94525995208` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 22s | $0.03 | 4m27s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995208.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_CallContract_Invalid_Balance_Reader_Contract_Regression | `94525995116` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 44s | $0.03 | 4m17s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995116.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Stellar_Suite (workflow-gateway-stellar) | `94526005930` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 42s | $0.03 | 4m14s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005930.log | +| Run Core CRE E2E Tests / Test_CRE_V2_EVM_Read_TxArtifacts (workflow-gateway-capabilities) | `94526005877` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 42s | $0.03 | 4m7s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005877.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_GetTransactionReceipt_Invalid_Hash_Regression | `94525995467` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 27s | $0.02 | 4m5s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995467.log | +| Run Core CRE E2E Tests / Test_CRE_V2_ShardRingOCROverrides (workflow-gateway-sharded-ringocr-overrides) | `94526005828` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 42s | $0.03 | 4m5s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005828.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_GetTransactionByHash_Invalid_Hash_Regression | `94525995347` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 30s | $0.02 | 4m3s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995347.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_BalanceAt_Invalid_Address_Regression | `94525995199` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 31s | $0.02 | 4m3s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995199.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_EstimateGas_Invalid_To_Address_Regression | `94525995095` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 23s | $0.02 | 4m2s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995095.log | +| Run Core CRE Mixed-Env Tests / Test_CRE_V2_EVM_Read_TxArtifacts (mixed-env) | `94525980128` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 26s | $0.02 | 4m2s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525980128.log | +| Run Core CRE E2E Tests / Test_CRE_V2_EVM_Write_LogTrigger (workflow-gateway-capabilities) | `94526005680` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 28s | $0.02 | 3m58s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005680.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Suite_Bucket_A (workflow-gateway-capabilities) | `94526005768` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 29s | $0.02 | 3m55s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005768.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_WriteReport_Corrupt_Receiver_Address_Regression | `94525995300` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 31s | $0.02 | 3m52s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995300.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_WriteReport_Invalid_Gas_Regression | `94525995269` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 29s | $0.02 | 3m51s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995269.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_CallContract_Invalid_Addr_To_Read_Regression | `94525995155` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 31s | $0.02 | 3m50s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995155.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_FilterLogs_Invalid_FromBlock_Regression | `94525995204` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 31s | $0.02 | 3m50s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995204.log | +| Run Core CRE E2E Tests / Test_CRE_V2_EVM_Read_HeavyCalls (workflow-gateway-capabilities) | `94526005721` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 28s | $0.02 | 3m50s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005721.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_Consensus_Regression | `94525995272` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 31s | $0.02 | 3m45s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995272.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Solana_Write (workflow) | `94526005772` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 42s | $0.02 | 3m40s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005772.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Solana_Read_Tx (workflow) | `94526005867` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 27s | $0.02 | 3m34s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005867.log | +| Run Core CRE Mixed-Env Tests / Test_CRE_V2_EVM_Read_HeavyCalls (mixed-env) | `94525980191` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 26s | $0.02 | 3m33s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525980191.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_FilterLogs_Invalid_ToBlock_Regression | `94525995290` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 28s | $0.02 | 3m32s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995290.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_FilterLogs_Invalid_Addresses_Regression | `94525995251` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 28s | $0.02 | 3m30s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995251.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Solana_Read_Accounts (workflow) | `94526005915` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 28s | $0.02 | 3m30s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005915.log | +| Run Core CRE E2E Tests / Test_CRE_V2_EVM_Read_StateQueries (workflow-gateway-capabilities) | `94526005810` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 29s | $0.02 | 3m21s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005810.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Solana_Read_Block (workflow) | `94526005862` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 27s | $0.02 | 3m21s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005862.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_HeaderByNumber_Invalid_Block_Regression | `94525995226` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 29s | $0.02 | 3m10s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995226.log | +| Run Core CRE Mixed-Env Tests / Test_CRE_V2_Suite_Bucket_A (mixed-env) | `94525980099` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 25s | $0.02 | 3m8s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525980099.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_Cron_Regression | `94525995175` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 23s | $0.02 | 3m7s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995175.log | +| Run Core CRE Mixed-Env Tests / Test_CRE_V2_EVM_Read_StateQueries (mixed-env) | `94525980118` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 26s | $0.02 | 3m5s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525980118.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_WriteReport_Invalid_Receiver_Regression | `94525995319` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 28s | $0.02 | 2m56s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995319.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Module_Cache (workflow-gateway-cache-test) | `94526005802` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 26s | $0.02 | 2m56s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005802.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_HTTP_Action_CRUD_Regression | `94525995471` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 29s | $0.02 | 2m55s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995471.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Beholder_Suite (workflow-gateway-capabilities) | `94526005758` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 26s | $0.02 | 2m54s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005758.log | +| Run Core CRE E2E Tests / Test_CRE_V2_Suite_Bucket_B (workflow-gateway-capabilities-vault-stall-purge) | `94526005716` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 29s | $0.02 | 2m40s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005716.log | +| Run Core CRE E2E Tests / Test_CRE_V2_HTTP_Action_Multi_Gateway (workflow-gateway-capabilities-multi-gateway) | `94526005887` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 28s | $0.01 | 2m18s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005887.log | +| Run Core CRE E2E Tests / Test_CRE_V2_DurableEmitter (workflow-gateway-capabilities) | `94526005820` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 44s | $0.01 | 2m12s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005820.log | +| Run Core CRE E2E Tests / Test_CRE_V2_HTTP_Action_Regression_Suite (workflow-gateway-capabilities) | `94526005775` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 42s | $0.01 | 2m6s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005775.log | +| Compile CRE & CCIP Tests | `94525207751` | runs-on:c8in.8xlarge (spot) [req: c8in+c6in] | 27s | $0.03 | 2m5s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525207751.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_LogTrigger_Invalid_Address_Regression | `94525995210` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 29s | $0.01 | 2m4s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995210.log | +| Run Core CRE E2E Tests / Test_CRE_V2_ShardManualAssignment (workflow-gateway-sharded-manual) | `94526006020` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 44s | $0.01 | 2m2s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526006020.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_HTTP_Regression | `94525995135` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 30s | $0.01 | 1m54s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995135.log | +| Run Core CRE E2E Tests / Test_CRE_GRPCSource_AuthRejection (workflow-gateway-capabilities) | `94526005747` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 25s | $0.01 | 1m50s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005747.log | +| Build Chainlink Image (plugins) | `94525113958` | runs-on:m8idn.4xlarge (spot) [req: m8idn+m6idn] | 32s | $0.02 | 1m42s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525113958.log | +| Build Chainlink Image | `94525113891` | runs-on:m8idn.4xlarge (spot) [req: m8idn+m6idn] | 32s | $0.02 | 1m39s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525113891.log | +| Run Core CRE E2E Tests / Test_CRE_CRESettings_Override (workflow-gateway-capabilities) | `94526005805` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 41s | $0.01 | 1m32s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005805.log | +| Run Core CRE E2E Tests / Test_CRE_GRPCSource_Lifecycle (workflow-gateway-capabilities) | `94526005730` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 28s | $0.01 | 1m22s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94526005730.log | +| Run Core CRE E2E Regression Tests / Test_CRE_V2_EVM_WriteReport_Failing_On_Receiver | `94525995306` | runs-on:m8id.4xlarge (spot) [req: m7i+m8i] | 28s | $0.01 | 1m14s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525995306.log | +| Run Core CRE E2E Tests / define-test-matrix | `94525919295` | UBUNTU | 10s | $0.00 | 8s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525919295.log | +| Check Paths That Require Tests To Run | `94525015219` | UBUNTU | 8s | $0.00 | 8s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525015219.log | +| Get PR labels and set runner labels | `94525015352` | UBUNTU | 14s | $0.00 | 7s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525015352.log | +| E2E Tests Setup | `94525113867` | UBUNTU | 14s | $0.00 | 6s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525113867.log | +| Run Core CRE E2E Regression Tests / define-test-matrix | `94525919277` | UBUNTU | 10s | $0.00 | 5s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525919277.log | +| Run Core CRE Mixed-Env Tests / define-test-matrix | `94525919248` | UBUNTU | 10s | $0.00 | 2s | success | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94525919248.log | +| ETH Smoke Tests | `94527849287` | UBUNTU | 6s | $0.00 | 2s | failure | /Users/adamhamrick/Library/Caches/octometrics/smartcontractkit/chainlink/logs/31723196346/94527849287.log | + +### Step Aggregation Across Matrix +| Step Name | Count | Total | % Total | Median | Max | +|---|---|---|---|---|---| +| Run CRE Smoke system tests | 28 | 57m27s | 30.0% | 1m58s | 4m33s | +| Start local CRE | 53 | 49m30s | 25.8% | 50s | 2m13s | +| Run CRE Regression system tests | 20 | 43m36s | 22.8% | 2m28.5s | 3m9s | +| Run CRE Smoke system tests (mixed-env) | 5 | 11m8s | 5.8% | 1m56s | 3m3s | +| Set up job | 59 | 4m12s | 2.2% | 4s | 12s | +| Checkout | 56 | 3m40s | 1.9% | 2s | 32s | +| Setup GitHub token using GATI | 34 | 3m25s | 1.8% | 5s | 10s | +| Analyze and upload test results (✅ Tests passed) | 52 | 2m52s | 1.5% | 3s | 4s | +| Build Chainlink Image | 2 | 2m30s | 1.3% | 1m15s | 1m17s | +| Login to Amazon ECR | 53 | 2m25s | 1.3% | 3s | 4s | + +### Critical Path +Total Duration: 10m0s (Queue: 1m27s, Execution: 7m16s) + +| Job Name | Duration | Queue Time | Slack | +|---|---|---|---| +| `Get PR labels and set runner labels` | 7s | 14s | 0s | +| `E2E Tests Setup` | 6s | 14s | 0s | +| `Compile CRE & CCIP Tests` | 2m5s | 27s | 0s | +| `Run Core CRE E2E Tests / Test_CRE_V2_Suite_Bucket_B (workflow-gateway-capabilities-vault-jwt_auth-enabled)` | 4m56s | 26s | 0s | +| `ETH Smoke Tests` | 2s | 6s | 0s | + +#### Near-Critical Jobs (Slack ≤ 60s) +| Job Name | Duration | Queue Time | Slack | +|---|---|---|---| +| `Check Paths That Require Tests To Run` | 8s | 8s | 19s | +| `Run Core CRE E2E Tests / Test_CRE_V2_Suite_Bucket_C (workflow-gateway-capabilities)` | 6m2s | 26s | 8s | +| `Run Core CRE E2E Tests / Test_CRE_V2_Suite_Bucket_B (workflow-gateway-capabilities-vault-optimizations-enabled)` | 5m41s | 26s | 29s | +| `Run Core CRE E2E Tests / Test_CRE_V2_Suite_Bucket_B (workflow-gateway-capabilities)` | 5m20s | 27s | 49s | +| `Run Core CRE E2E Tests / Test_CRE_V2_Sharding (workflow-gateway-sharded)` | 5m16s | 28s | 52s | +| `Run Core CRE E2E Tests / Test_CRE_V2_Solana_LogTrigger (workflow)` | 5m2s | 42s | 52s | + +### Top Slowest Jobs Step Breakdown + +#### Run Core CRE E2E Tests / Test_CRE_V2_Suite_Bucket_C (workflow-gateway-capabilities) (6m2s) + +| Step Name | Duration | Status | +|---|---|---| +| Run CRE Smoke system tests | 4m33s | success | +| Start local CRE | 55s | success | +| Set up job | 5s | success | +| Setup GitHub token using GATI | 5s | success | +| Checkout | 4s | success | +| Analyze and upload test results () | 4s | failure | +| Upload all artifacts as single package | 4s | success | +| Login to Amazon ECR | 3s | success | +| Save Smoke tests Docker logs | 3s | success | +| Restore Pre-Compiled Test Binaries from S3 Cache | 2s | success | + +| *20 minor steps (≤1s)* | *3s* | - | + +#### Run Core CRE E2E Tests / Test_CRE_V2_Suite_Bucket_B (workflow-gateway-capabilities-vault-optimizations-enabled) (5m41s) + +| Step Name | Duration | +|---|---| +| Run CRE Smoke system tests | 4m25s | +| Start local CRE | 50s | +| Set up job | 5s | +| Setup GitHub token using GATI | 5s | +| Login to Amazon ECR | 3s | +| Analyze and upload test results (✅ Tests passed) | 3s | +| Checkout | 2s | +| Restore Pre-Compiled Test Binaries from S3 Cache | 2s | + +| *22 minor steps (≤1s)* | *3s* | + +#### Run Core CRE E2E Tests / Test_CRE_V2_Suite_Bucket_B (workflow-gateway-capabilities) (5m20s) + +| Step Name | Duration | +|---|---| +| Run CRE Smoke system tests | 4m2s | +| Start local CRE | 52s | +| Set up job | 5s | +| Setup GitHub token using GATI | 4s | +| Checkout | 3s | +| Analyze and upload test results (✅ Tests passed) | 3s | +| Restore Pre-Compiled Test Binaries from S3 Cache | 2s | +| Login to Amazon ECR | 2s | + +| *22 minor steps (≤1s)* | *6s* | + +#### Run Core CRE E2E Tests / Test_CRE_V2_Sharding (workflow-gateway-sharded) (5m16s) + +| Step Name | Duration | +|---|---| +| Run CRE Smoke system tests | 3m56s | +| Start local CRE | 55s | +| Set up job | 5s | +| Setup GitHub token using GATI | 5s | +| Analyze and upload test results (✅ Tests passed) | 3s | +| Checkout | 2s | +| Restore Pre-Compiled Test Binaries from S3 Cache | 2s | +| Login to Amazon ECR | 2s | + +| *22 minor steps (≤1s)* | *5s* | + +#### Run Core CRE E2E Tests / Test_CRE_V2_Solana_LogTrigger (workflow) (5m2s) + +| Step Name | Duration | +|---|---| +| Run CRE Smoke system tests | 2m38s | +| Start local CRE | 1m56s | +| Setup GitHub token using GATI | 6s | +| Set up job | 4s | +| Checkout | 3s | +| Restore Pre-Compiled Test Binaries from S3 Cache | 3s | +| Login to Amazon ECR | 3s | +| Analyze and upload test results (✅ Tests passed) | 3s | + +| *22 minor steps (≤1s)* | *4s* | + +### Skipped + +- Run CCIP v1.6 E2E Tests + +## Job dependencies + +```mermaid +flowchart TD + build_chainlink["Build Chainlink Image ${{ matrix.image.name }}"] + changes["Check Paths That Require Tests To Run"] + check_e2e_test_results["ETH Smoke Tests"] + compile_tests["Compile CRE & CCIP Tests"] + labels["Get PR labels and set runner labels"] + run_ccip_v1_6_e2e_tests["Run CCIP v1.6 E2E Tests"] + run_core_cre_e2e_regression_tests["Run Core CRE E2E Regression Tests"] + run_core_cre_e2e_tests["Run Core CRE E2E Tests"] + run_core_cre_e2e_tests_setup["E2E Tests Setup"] + run_core_cre_mixed_env_tests["Run Core CRE Mixed-Env Tests"] + Test_CRE_CRESettings_Override__(workflow_gateway_capabilities)["Test_CRE_CRESettings_Override (workflow-gateway-capabilities)"] + Test_CRE_GRPCSource_AuthRejection__(workflow_gateway_capabilities)["Test_CRE_GRPCSource_AuthRejection (workflow-gateway-capabilities)"] + Test_CRE_GRPCSource_Lifecycle__(workflow_gateway_capabilities)["Test_CRE_GRPCSource_Lifecycle (workflow-gateway-capabilities)"] + Test_CRE_V2_Aptos_Suite__(workflow_gateway_aptos)["Test_CRE_V2_Aptos_Suite (workflow-gateway-aptos)"] + Test_CRE_V2_Beholder_Suite__(workflow_gateway_capabilities)["Test_CRE_V2_Beholder_Suite (workflow-gateway-capabilities)"] + Test_CRE_V2_Consensus_Regression["Test_CRE_V2_Consensus_Regression"] + Test_CRE_V2_Cron_Regression["Test_CRE_V2_Cron_Regression"] + Test_CRE_V2_DurableEmitter__(workflow_gateway_capabilities)["Test_CRE_V2_DurableEmitter (workflow-gateway-capabilities)"] + Test_CRE_V2_EVM_BalanceAt_Invalid_Address_Regression["Test_CRE_V2_EVM_BalanceAt_Invalid_Address_Regression"] + Test_CRE_V2_EVM_CallContract_Invalid_Addr_To_Read_Regression["Test_CRE_V2_EVM_CallContract_Invalid_Addr_To_Read_Regression"] + Test_CRE_V2_EVM_CallContract_Invalid_Balance_Reader_Contract_Regression["Test_CRE_V2_EVM_CallContract_Invalid_Balance_Reader_Contract_Regression"] + Test_CRE_V2_EVM_EstimateGas_Invalid_To_Address_Regression["Test_CRE_V2_EVM_EstimateGas_Invalid_To_Address_Regression"] + Test_CRE_V2_EVM_FilterLogs_Invalid_Addresses_Regression["Test_CRE_V2_EVM_FilterLogs_Invalid_Addresses_Regression"] + Test_CRE_V2_EVM_FilterLogs_Invalid_FromBlock_Regression["Test_CRE_V2_EVM_FilterLogs_Invalid_FromBlock_Regression"] + Test_CRE_V2_EVM_FilterLogs_Invalid_ToBlock_Regression["Test_CRE_V2_EVM_FilterLogs_Invalid_ToBlock_Regression"] + Test_CRE_V2_EVM_GetTransactionByHash_Invalid_Hash_Regression["Test_CRE_V2_EVM_GetTransactionByHash_Invalid_Hash_Regression"] + Test_CRE_V2_EVM_GetTransactionReceipt_Invalid_Hash_Regression["Test_CRE_V2_EVM_GetTransactionReceipt_Invalid_Hash_Regression"] + Test_CRE_V2_EVM_HeaderByNumber_Invalid_Block_Regression["Test_CRE_V2_EVM_HeaderByNumber_Invalid_Block_Regression"] + Test_CRE_V2_EVM_LogTrigger_Invalid_Address_Regression["Test_CRE_V2_EVM_LogTrigger_Invalid_Address_Regression"] + Test_CRE_V2_EVM_Read_HeavyCalls_(mixed_env)["Test_CRE_V2_EVM_Read_HeavyCalls (mixed-env)"] + Test_CRE_V2_EVM_Read_HeavyCalls__(workflow_gateway_capabilities)["Test_CRE_V2_EVM_Read_HeavyCalls (workflow-gateway-capabilities)"] + Test_CRE_V2_EVM_Read_StateQueries_(mixed_env)["Test_CRE_V2_EVM_Read_StateQueries (mixed-env)"] + Test_CRE_V2_EVM_Read_StateQueries__(workflow_gateway_capabilities)["Test_CRE_V2_EVM_Read_StateQueries (workflow-gateway-capabilities)"] + Test_CRE_V2_EVM_Read_TxArtifacts_(mixed_env)["Test_CRE_V2_EVM_Read_TxArtifacts (mixed-env)"] + Test_CRE_V2_EVM_Read_TxArtifacts__(workflow_gateway_capabilities)["Test_CRE_V2_EVM_Read_TxArtifacts (workflow-gateway-capabilities)"] + Test_CRE_V2_EVM_WriteReport_Corrupt_Receiver_Address_Regression["Test_CRE_V2_EVM_WriteReport_Corrupt_Receiver_Address_Regression"] + Test_CRE_V2_EVM_WriteReport_Failing_On_Receiver["Test_CRE_V2_EVM_WriteReport_Failing_On_Receiver"] + Test_CRE_V2_EVM_WriteReport_Invalid_Gas_Regression["Test_CRE_V2_EVM_WriteReport_Invalid_Gas_Regression"] + Test_CRE_V2_EVM_WriteReport_Invalid_Receiver_Regression["Test_CRE_V2_EVM_WriteReport_Invalid_Receiver_Regression"] + Test_CRE_V2_EVM_Write_LogTrigger__(workflow_gateway_capabilities)["Test_CRE_V2_EVM_Write_LogTrigger (workflow-gateway-capabilities)"] + Test_CRE_V2_HTTP_Action_CRUD_Regression["Test_CRE_V2_HTTP_Action_CRUD_Regression"] + Test_CRE_V2_HTTP_Action_Multi_Gateway__(workflow_gateway_capabilities_multi_gateway)["Test_CRE_V2_HTTP_Action_Multi_Gateway ...ow-gateway-capabilities-multi-gateway)"] + Test_CRE_V2_HTTP_Action_Regression_Suite__(workflow_gateway_capabilities)["Test_CRE_V2_HTTP_Action_Regression_Suite (workflow-gateway-capabilities)"] + Test_CRE_V2_HTTP_Regression["Test_CRE_V2_HTTP_Regression"] + Test_CRE_V2_Module_Cache__(workflow_gateway_cache_test)["Test_CRE_V2_Module_Cache (workflow-gateway-cache-test)"] + Test_CRE_V2_ShardManualAssignment__(workflow_gateway_sharded_manual)["Test_CRE_V2_ShardManualAssignment (workflow-gateway-sharded-manual)"] + Test_CRE_V2_ShardRingOCROverrides__(workflow_gateway_sharded_ringocr_overrides)["Test_CRE_V2_ShardRingOCROverrides (workflow-gateway-sharded-ringocr-overrides)"] + Test_CRE_V2_Sharding__(workflow_gateway_sharded)["Test_CRE_V2_Sharding (workflow-gateway-sharded)"] + Test_CRE_V2_Solana_LogTrigger__(workflow)["Test_CRE_V2_Solana_LogTrigger (workflow)"] + Test_CRE_V2_Solana_Read_Accounts__(workflow)["Test_CRE_V2_Solana_Read_Accounts (workflow)"] + Test_CRE_V2_Solana_Read_Block__(workflow)["Test_CRE_V2_Solana_Read_Block (workflow)"] + Test_CRE_V2_Solana_Read_Tx__(workflow)["Test_CRE_V2_Solana_Read_Tx (workflow)"] + Test_CRE_V2_Solana_Write__(workflow)["Test_CRE_V2_Solana_Write (workflow)"] + Test_CRE_V2_Stellar_Regression["Test_CRE_V2_Stellar_Regression"] + Test_CRE_V2_Stellar_Suite__(workflow_gateway_stellar)["Test_CRE_V2_Stellar_Suite (workflow-gateway-stellar)"] + Test_CRE_V2_Suite_Bucket_A_(mixed_env)["Test_CRE_V2_Suite_Bucket_A (mixed-env)"] + Test_CRE_V2_Suite_Bucket_A__(workflow_gateway_capabilities)["Test_CRE_V2_Suite_Bucket_A (workflow-gateway-capabilities)"] + Test_CRE_V2_Suite_Bucket_B_(mixed_env)["Test_CRE_V2_Suite_Bucket_B (mixed-env)"] + Test_CRE_V2_Suite_Bucket_B__(workflow_gateway_capabilities)["Test_CRE_V2_Suite_Bucket_B (workflow-gateway-capabilities)"] + Test_CRE_V2_Suite_Bucket_B__(workflow_gateway_capabilities_vault_jwt_auth_enabled)["Test_CRE_V2_Suite_Bucket_B (workflow-...y-capabilities-vault-jwt_auth-enabled)"] + Test_CRE_V2_Suite_Bucket_B__(workflow_gateway_capabilities_vault_optimizations_enabled)["Test_CRE_V2_Suite_Bucket_B (workflow-...abilities-vault-optimizations-enabled)"] + Test_CRE_V2_Suite_Bucket_B__(workflow_gateway_capabilities_vault_stall_purge)["Test_CRE_V2_Suite_Bucket_B (workflow-gateway-capabilities-vault-stall-purge)"] + Test_CRE_V2_Suite_Bucket_C__(workflow_gateway_capabilities)["Test_CRE_V2_Suite_Bucket_C (workflow-gateway-capabilities)"] + define_test_matrix["define-test-matrix"] + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_Consensus_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_Cron_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_BalanceAt_Invalid_Address_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_CallContract_Invalid_Addr_To_Read_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_CallContract_Invalid_Balance_Reader_Contract_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_EstimateGas_Invalid_To_Address_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_FilterLogs_Invalid_Addresses_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_FilterLogs_Invalid_FromBlock_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_FilterLogs_Invalid_ToBlock_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_GetTransactionByHash_Invalid_Hash_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_GetTransactionReceipt_Invalid_Hash_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_HeaderByNumber_Invalid_Block_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_LogTrigger_Invalid_Address_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_WriteReport_Corrupt_Receiver_Address_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_WriteReport_Failing_On_Receiver + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_WriteReport_Invalid_Gas_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_EVM_WriteReport_Invalid_Receiver_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_HTTP_Action_CRUD_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_HTTP_Regression + Run_Core_CRE_E2E_Regression_Tests --> Test_CRE_V2_Stellar_Regression + Run_Core_CRE_E2E_Regression_Tests --> define_test_matrix + Run_Core_CRE_E2E_Tests --> Test_CRE_CRESettings_Override__(workflow_gateway_capabilities) + Run_Core_CRE_E2E_Tests --> Test_CRE_GRPCSource_AuthRejection__(workflow_gateway_capabilities) + Run_Core_CRE_E2E_Tests --> Test_CRE_GRPCSource_Lifecycle__(workflow_gateway_capabilities) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Aptos_Suite__(workflow_gateway_aptos) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Beholder_Suite__(workflow_gateway_capabilities) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_DurableEmitter__(workflow_gateway_capabilities) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_EVM_Read_HeavyCalls__(workflow_gateway_capabilities) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_EVM_Read_StateQueries__(workflow_gateway_capabilities) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_EVM_Read_TxArtifacts__(workflow_gateway_capabilities) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_EVM_Write_LogTrigger__(workflow_gateway_capabilities) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_HTTP_Action_Multi_Gateway__(workflow_gateway_capabilities_multi_gateway) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_HTTP_Action_Regression_Suite__(workflow_gateway_capabilities) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Module_Cache__(workflow_gateway_cache_test) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_ShardManualAssignment__(workflow_gateway_sharded_manual) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_ShardRingOCROverrides__(workflow_gateway_sharded_ringocr_overrides) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Sharding__(workflow_gateway_sharded) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Solana_LogTrigger__(workflow) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Solana_Read_Accounts__(workflow) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Solana_Read_Block__(workflow) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Solana_Read_Tx__(workflow) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Solana_Write__(workflow) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Stellar_Suite__(workflow_gateway_stellar) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Suite_Bucket_A__(workflow_gateway_capabilities) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Suite_Bucket_B__(workflow_gateway_capabilities) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Suite_Bucket_B__(workflow_gateway_capabilities_vault_jwt_auth_enabled) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Suite_Bucket_B__(workflow_gateway_capabilities_vault_optimizations_enabled) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Suite_Bucket_B__(workflow_gateway_capabilities_vault_stall_purge) + Run_Core_CRE_E2E_Tests --> Test_CRE_V2_Suite_Bucket_C__(workflow_gateway_capabilities) + Run_Core_CRE_E2E_Tests --> define_test_matrix + Run_Core_CRE_Mixed_Env_Tests --> Test_CRE_V2_EVM_Read_HeavyCalls_(mixed_env) + Run_Core_CRE_Mixed_Env_Tests --> Test_CRE_V2_EVM_Read_StateQueries_(mixed_env) + Run_Core_CRE_Mixed_Env_Tests --> Test_CRE_V2_EVM_Read_TxArtifacts_(mixed_env) + Run_Core_CRE_Mixed_Env_Tests --> Test_CRE_V2_Suite_Bucket_A_(mixed_env) + Run_Core_CRE_Mixed_Env_Tests --> Test_CRE_V2_Suite_Bucket_B_(mixed_env) + Run_Core_CRE_Mixed_Env_Tests --> define_test_matrix + build_chainlink --> check_e2e_test_results + build_chainlink --> run_ccip_v1_6_e2e_tests + build_chainlink --> run_core_cre_e2e_regression_tests + build_chainlink --> run_core_cre_e2e_tests + build_chainlink --> run_core_cre_mixed_env_tests + changes --> build_chainlink + changes --> run_core_cre_e2e_tests_setup + compile_tests --> run_ccip_v1_6_e2e_tests + compile_tests --> run_core_cre_e2e_regression_tests + compile_tests --> run_core_cre_e2e_tests + compile_tests --> run_core_cre_mixed_env_tests + labels --> build_chainlink + labels --> run_core_cre_e2e_tests_setup + run_ccip_v1_6_e2e_tests --> check_e2e_test_results + run_core_cre_e2e_regression_tests --> check_e2e_test_results + run_core_cre_e2e_tests --> check_e2e_test_results + run_core_cre_e2e_tests_setup --> compile_tests + run_core_cre_e2e_tests_setup --> run_ccip_v1_6_e2e_tests + run_core_cre_e2e_tests_setup --> run_core_cre_e2e_regression_tests + run_core_cre_e2e_tests_setup --> run_core_cre_e2e_tests + run_core_cre_e2e_tests_setup --> run_core_cre_mixed_env_tests + run_core_cre_mixed_env_tests --> check_e2e_test_results +``` diff --git a/.github/AGENTS.md b/.github/AGENTS.md index 2ee2e4aaa91..a8e76126da8 100644 --- a/.github/AGENTS.md +++ b/.github/AGENTS.md @@ -6,6 +6,7 @@ GitHub Actions in the Chainlink Go monorepo. - Prefer runs-on runners when ubuntu-latest is insufficient. - Minimize YAML and shell in workflows. - Resolve smartcontractkit/.github from a local clone. Ask the user for the path if you cannot find it. +- Use `echo "key=value" | tee -a "$GITHUB_OUTPUT"` instead of `echo "key=value" >> "${GITHUB_OUTPUT}"` diff --git a/.github/workflows/ccip-system-tests.yaml b/.github/workflows/ccip-system-tests.yaml index 8b3821c8d5c..9d46e03067f 100644 --- a/.github/workflows/ccip-system-tests.yaml +++ b/.github/workflows/ccip-system-tests.yaml @@ -134,15 +134,10 @@ jobs: - name: Set up Go id: setup-go - uses: smartcontractkit/.github/actions/ctf-setup-go@fa1d48a33e24f9b3b9f8c52e99a578a4597cb2a5 # v0.4.0 + uses: actions/setup-go@v7 with: - go_mod_path: integration-tests/go.mod - cache_key_id: integration-tests-v1 - cache_builds: true - cache_restore_only: "true" - should_tidy: false - no_cache: false - gati_token: ${{ steps.github-token.outputs.access-token }} + go-version-file: integration-tests/go.mod + cache: false # Using pre-compiled binaries, only need go setup for gotestsum - name: Restore Pre-Compiled Test Binaries from S3 Cache uses: actions/cache/restore@v6 diff --git a/.github/workflows/cre-mixed-env-tests.yaml b/.github/workflows/cre-mixed-env-tests.yaml index a476c56ef97..1e9db978dc8 100644 --- a/.github/workflows/cre-mixed-env-tests.yaml +++ b/.github/workflows/cre-mixed-env-tests.yaml @@ -10,8 +10,7 @@ on: workflow_dispatch: inputs: chainlink_image_repository_path: - description: - "ECR repository name used to compose the PR image with chainlink_image_tag." + description: "ECR repository name used to compose the PR image with chainlink_image_tag." required: true type: string chainlink_image_tag: @@ -59,8 +58,7 @@ on: workflow_call: inputs: chainlink_image_repository_path: - description: - "ECR repository name used to compose the PR image with chainlink_image_tag." + description: "ECR repository name used to compose the PR image with chainlink_image_tag." required: true type: string chainlink_image_tag: @@ -166,14 +164,10 @@ jobs: persist-credentials: false - name: Set up Go - id: setup-go - uses: smartcontractkit/.github/actions/ctf-setup-go@fa1d48a33e24f9b3b9f8c52e99a578a4597cb2a5 # v0.4.0 + uses: actions/setup-go@v7 with: - go_mod_path: system-tests/tests/go.mod - # No Go build/restore: mixed-env runs the pre-compiled cre-smoke.test binary - # (restored below), and the non-determinism gate reuses that same binary — so - # nothing is compiled here and cache restore would only waste ~30-60s per run. - no_cache: true + go-version-file: system-tests/tests/go.mod + cache: false - name: Restore Pre-Compiled Test Binaries from S3 Cache uses: actions/cache/restore@v6 diff --git a/.github/workflows/cre-regression-system-tests.yaml b/.github/workflows/cre-regression-system-tests.yaml index 94cfebdbea8..e207e12386a 100644 --- a/.github/workflows/cre-regression-system-tests.yaml +++ b/.github/workflows/cre-regression-system-tests.yaml @@ -146,11 +146,10 @@ jobs: persist-credentials: false - name: Set up Go - id: setup-go - uses: smartcontractkit/.github/actions/ctf-setup-go@fa1d48a33e24f9b3b9f8c52e99a578a4597cb2a5 # v0.4.0 + uses: actions/setup-go@v7 with: - go_mod_path: system-tests/tests/go.mod - no_cache: true + go-version-file: system-tests/tests/go.mod + cache: false - name: Restore Pre-Compiled Test Binaries from S3 Cache uses: actions/cache/restore@v6 @@ -256,7 +255,7 @@ jobs: exit_code="$?" if [ "$exit_code" -eq 0 ]; then - echo "tests_result=✅ Tests passed" >> "$GITHUB_OUTPUT" + echo "tests_result=✅ Tests passed" | tee -a "$GITHUB_OUTPUT" fi echo "⚠️⚠️⚠️ Add 'skip-e2e-regression' label to skip this step if necessary ⚠️⚠️⚠️" diff --git a/.github/workflows/cre-system-tests.yaml b/.github/workflows/cre-system-tests.yaml index 2ba0a2a6df9..202c7f65137 100644 --- a/.github/workflows/cre-system-tests.yaml +++ b/.github/workflows/cre-system-tests.yaml @@ -57,6 +57,11 @@ on: "The version of Chainlink repository to use for the tests. If empty, defaults to github.sha." default: "" + test_matrix: + required: false + type: string + description: "Optional precomputed test matrix JSON string." + default: "" jobs: define-test-matrix: @@ -76,6 +81,11 @@ jobs: id: define-matrix shell: bash run: | + if [[ -n '${{ inputs.test_matrix }}' ]]; then + echo 'matrix=${{ inputs.test_matrix }}' | tee -a "$GITHUB_OUTPUT" + exit 0 + fi + TOPOLOGIES_JSON='[ {"topology":"workflow-gateway-capabilities","configs":"configs/workflow-gateway-capabilities-don.toml"} ]' @@ -102,10 +112,10 @@ jobs: "Test_CRE_V2_Solana_Read_Accounts": [ {"topology":"workflow","configs":"configs/workflow-don-solana.toml"} ], - "Test_CRE_V2_Solana_Read_Block": [ + "Test_CRE_V2_Solana_Read_Block": [ {"topology":"workflow","configs":"configs/workflow-don-solana.toml"} ], - "Test_CRE_V2_Solana_Read_Tx": [ + "Test_CRE_V2_Solana_Read_Tx": [ {"topology":"workflow","configs":"configs/workflow-don-solana.toml"} ], "Test_CRE_V2_Sharding": [ @@ -125,7 +135,7 @@ jobs: ] }' - test_names=$(grep -rh -oP '^func \K(Test|Example)[^(]+' system-tests/tests/smoke/cre/*_test.go | grep -v Test_Upgrade | grep -v '^TestMain$') + test_names=$(grep -rh -oP '^func \K(Test|Example)[^(]+' system-tests/tests/smoke/cre/*_test.go | grep -v Test_Upgrade | grep -v '^TestMain$' | grep -v '_LoadExpectedConfig$' | grep -v '_CRESettingDefaults' | grep -v '^TestMustMintVaultJWT' | grep -v '^TestPendingQueueStallWedge') tests=$(echo "$test_names" | jq -c -R -s \ --argjson run_id "${{ github.run_id }}" \ @@ -186,11 +196,10 @@ jobs: persist-credentials: false - name: Set up Go - id: setup-go - uses: smartcontractkit/.github/actions/ctf-setup-go@fa1d48a33e24f9b3b9f8c52e99a578a4597cb2a5 # v0.4.0 + uses: actions/setup-go@v7 with: - go_mod_path: system-tests/tests/go.mod - no_cache: true + go-version-file: system-tests/tests/go.mod + cache: false - name: Restore Pre-Compiled Test Binaries from S3 Cache uses: actions/cache/restore@v6 @@ -391,7 +400,7 @@ jobs: exit_code="$?" if [ "$exit_code" -eq 0 ]; then - echo "tests_result=✅ Tests passed" >> "${GITHUB_OUTPUT}" + echo "tests_result=✅ Tests passed" | tee -a "${GITHUB_OUTPUT}" fi - name: diff --git a/.github/workflows/integration-in-memory-tests.yml b/.github/workflows/integration-in-memory-tests.yml index e3e68e7a8ca..1c028fd0e4e 100644 --- a/.github/workflows/integration-in-memory-tests.yml +++ b/.github/workflows/integration-in-memory-tests.yml @@ -186,14 +186,17 @@ jobs: - name: Set up Go for compilation id: setup-go - uses: smartcontractkit/.github/actions/ctf-setup-go@fa1d48a33e24f9b3b9f8c52e99a578a4597cb2a5 # v0.4.0 + uses: actions/setup-go@v7 with: - go_mod_path: integration-tests/go.mod - cache_key_id: integration-tests-v1 - cache_builds: true - cache_restore_only: ${{ github.ref_name != 'develop' }} - should_tidy: false - gati_token: ${{ steps.github-token.outputs.access-token }} + go-version-file: integration-tests/go.mod + cache: true + cache-dependency-path: | + system-tests/tests/go.sum + integration-tests/go.sum + + - name: Configure Go private modules + shell: bash + run: go env -w GOPRIVATE=github.com/smartcontractkit/* - name: Compile E2E test binaries and tools shell: bash @@ -202,7 +205,6 @@ jobs: # Restored mod cache contains shallow VCS clones that can be in an # inconsistent state after tar restore, breaking fetches of new # pseudo-versions ("shallow file has changed since we read it"). - # Drop them; only private repos re-clone, public zips stay cached. rm -rf "$(go env GOMODCACHE)/cache/vcs" mkdir -p integration-tests/bin (cd integration-tests && go test -c -ldflags="-s -w" -o ./bin/ccip-inmemory.test ./smoke/ccip) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 39e26e96d7d..a8292fe7e69 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -44,42 +44,6 @@ env: TEST_SUITE: smoke jobs: - enforce-ctf-version: - name: Enforce CTF Version - runs-on: ubuntu-latest - # We don't directly merge dependabot PRs, so let's not waste the resources - if: github.actor != 'dependabot[bot]' - steps: - - run: echo "${{github.event_name}}" - - name: Checkout the repo - uses: actions/checkout@v7 - with: - persist-credentials: false - repository: smartcontractkit/chainlink - ref: ${{ inputs.cl_ref }} - - name: Check Merge Group Condition - id: condition-check - run: | - echo "Checking event condition..." - SHOULD_ENFORCE="false" - if [[ "$GITHUB_EVENT_NAME" == "merge_group" ]]; then - echo "We are in a merge_group event, now check if we are on the develop branch" - target_branch=$(cat "$GITHUB_EVENT_PATH" | jq -r .merge_group.base_ref) - if [[ "$target_branch" == "refs/heads/develop" ]]; then - echo "We are on the develop branch, we should enforce ctf version" - SHOULD_ENFORCE="true" - fi - fi - echo "should we enforce ctf version = $SHOULD_ENFORCE" - echo "should-enforce=$SHOULD_ENFORCE" | tee -a "$GITHUB_OUTPUT" - - name: Enforce CTF Version - if: steps.condition-check.outputs.should-enforce == 'true' - uses: smartcontractkit/.github/actions/ctf-check-mod-version@21b0189c5fdca0318617d259634b1a91e6d80262 # ctf-check-mod-version@0.0.0 - with: - go-project-path: ./integration-tests - module-name: github.com/smartcontractkit/chainlink-testing-framework/lib - enforce-semantic-tag: "true" - changes: name: Check Paths That Require Tests To Run # We don't directly merge dependabot PRs, so let's not waste the resources @@ -247,8 +211,8 @@ jobs: OPT_OUT: ${{ steps.label-runs-on-opt-out.outputs.check-label-found || 'false' }} GH_BUILDER_RUNNER: ubuntu22.04-8cores-32GB # include unique label (core/plugins) to ensure jobs are not competing for the same runner - SH_BUILDER_RUNNER_CORE: runs-on=${{ github.run_id }}-core/cpu=16/ram=64/family=m7i+m8i/spot=co/extras=s3-cache+tmpfs - SH_BUILDER_RUNNER_PLUGINS: runs-on=${{ github.run_id }}-plugins/cpu=16/ram=64/family=m7i+m8i/spot=co/extras=s3-cache+tmpfs + SH_BUILDER_RUNNER_CORE: runs-on=${{ github.run_id }}-core/cpu=16/ram=64/family=m8idn+m6idn/spot=co/volume=80gb:gp3:500mbs:4000iops/extras=s3-cache + SH_BUILDER_RUNNER_PLUGINS: runs-on=${{ github.run_id }}-plugins/cpu=16/ram=64/family=m8idn+m6idn/spot=co/volume=80gb:gp3:500mbs:4000iops/extras=s3-cache run: | if [[ "${OPT_OUT}" == "true" ]]; then echo "builder-runner-label=${GH_BUILDER_RUNNER}" | tee -a "$GITHUB_OUTPUT" @@ -265,7 +229,7 @@ jobs: name: integration deployment: false runs-on: ${{ matrix.image.runner }} - needs: [labels, enforce-ctf-version, changes] + needs: [labels, changes] permissions: id-token: write contents: read @@ -370,7 +334,7 @@ jobs: {"cache-mount/go-build-cache": {"target": "/var/cache-target", "id": "go-build-cache"}} run-core-cre-e2e-tests-setup: - name: Run Core CRE E2E Tests Setup + name: E2E Tests Setup runs-on: ubuntu-latest needs: [changes, labels] permissions: @@ -379,7 +343,91 @@ jobs: should-run: ${{ steps.cre-e2e-tests.outputs.should-run }} with-regression: ${{ steps.cre-regression-tests.outputs.with-regression }} run-mixed-env: ${{ steps.cre-mixed-env-tests.outputs.run-mixed-env }} + cre-matrix: ${{ steps.define-matrix.outputs.matrix }} + ccip-should-run: ${{ steps.ccip-e2e-tests.outputs.should-run }} steps: + - name: Checkout + uses: actions/checkout@v7 + with: + ref: ${{ inputs.cl_ref || github.sha }} + persist-credentials: false + + - name: Define CRE test matrix + id: define-matrix + shell: bash + run: | + test_names=$(grep -rh -oP '^func \K(Test|Example)[^(]+' system-tests/tests/smoke/cre/*_test.go | grep -v Test_Upgrade | grep -v '^TestMain$' | grep -v '_LoadExpectedConfig$' | grep -v '_CRESettingDefaults' | grep -v '^TestMustMintVaultJWT' | grep -v '^TestPendingQueueStallWedge') + + TOPOLOGIES_JSON='[ + {"topology":"workflow-gateway-capabilities","configs":"configs/workflow-gateway-capabilities-don.toml"} + ]' + + PER_TEST_TOPOLOGIES_JSON='{ + "Test_CRE_V2_Suite_Bucket_B": [ + {"topology":"workflow-gateway-capabilities","configs":"configs/workflow-gateway-capabilities-don.toml"}, + {"topology":"workflow-gateway-capabilities-vault-jwt_auth-enabled","configs":"configs/workflow-gateway-capabilities-don-vault-jwt_auth-enabled.toml"}, + {"topology":"workflow-gateway-capabilities-vault-optimizations-enabled","configs":"configs/workflow-gateway-capabilities-don-vault-optimizations-enabled.toml"}, + {"topology":"workflow-gateway-capabilities-vault-stall-purge","configs":"configs/workflow-gateway-capabilities-don-vault-stall-purge.toml"} + ], + "Test_CRE_V2_Aptos_Suite": [ + {"topology":"workflow-gateway-aptos","configs":"configs/workflow-gateway-don-aptos.toml"} + ], + "Test_CRE_V2_Stellar_Suite": [ + {"topology":"workflow-gateway-stellar","configs":"configs/workflow-gateway-don-stellar.toml"} + ], + "Test_CRE_V2_Solana_Write": [ + {"topology":"workflow","configs":"configs/workflow-don-solana.toml"} + ], + "Test_CRE_V2_Solana_LogTrigger": [ + {"topology":"workflow","configs":"configs/workflow-don-solana.toml"} + ], + "Test_CRE_V2_Solana_Read_Accounts": [ + {"topology":"workflow","configs":"configs/workflow-don-solana.toml"} + ], + "Test_CRE_V2_Solana_Read_Block": [ + {"topology":"workflow","configs":"configs/workflow-don-solana.toml"} + ], + "Test_CRE_V2_Solana_Read_Tx": [ + {"topology":"workflow","configs":"configs/workflow-don-solana.toml"} + ], + "Test_CRE_V2_Sharding": [ + {"topology":"workflow-gateway-sharded","configs":"configs/workflow-gateway-sharded-don.toml"} + ], + "Test_CRE_V2_ShardManualAssignment": [ + {"topology":"workflow-gateway-sharded-manual","configs":"configs/workflow-gateway-sharded-manual.toml"} + ], + "Test_CRE_V2_ShardRingOCROverrides": [ + {"topology":"workflow-gateway-sharded-ringocr-overrides","configs":"configs/workflow-gateway-sharded-ringocr-overrides.toml"} + ], + "Test_CRE_V2_Module_Cache": [ + {"topology":"workflow-gateway-cache-test","configs":"configs/workflow-gateway-don-cache-test.toml"} + ], + "Test_CRE_V2_HTTP_Action_Multi_Gateway": [ + {"topology":"workflow-gateway-capabilities-multi-gateway","configs":"configs/workflow-gateway-capabilities-multi-gateway-don.toml"} + ] + }' + + tests=$(echo "$test_names" | jq -c -R -s \ + --argjson run_id "${{ github.run_id }}" \ + --arg run_attempt "${{ github.run_attempt }}" \ + --argjson tops "$TOPOLOGIES_JSON" \ + --argjson per "$PER_TEST_TOPOLOGIES_JSON" ' + (split("\n") | map(select(length>0))) as $names + | [ $names[] as $name | $tops[] | {test_name:$name} + . ] as $baseAll + | ($baseAll | map(select(.test_name as $n | ($per[$n] | type) == "array" | not))) as $base + | [ $per | to_entries[] as $e + | $e.value[] | {test_name: $e.key} + . + ] as $extra + | ($base + $extra) + | to_entries + | map(.value + { + test_id: .key, + runs_on: "runs-on=\($run_id)-\(.key)-\($run_attempt)/cpu=16/ram=64/family=m7i+m8i/spot=co/image=ubuntu24-full-x64/extras=s3-cache+tmpfs" + }) + ') + + echo "matrix=$tests" | tee -a "$GITHUB_OUTPUT" + - name: CRE E2E Tests id: cre-e2e-tests env: @@ -475,6 +523,38 @@ jobs: echo "run-mixed-env=${RUN_MIXED_ENV}" | tee -a "$GITHUB_OUTPUT" + - name: CCIP v1.6 E2E Tests + id: ccip-e2e-tests + env: + GITHUB_EVENT_NAME: ${{ github.event_name }} + GITHUB_REF_TYPE: ${{ github.ref_type }} + CONTAINS_CHANGES: ${{ needs.changes.outputs.ccip-changes == 'true' }} + RUN_E2E_TESTS_LABEL_FOUND: ${{ needs.labels.outputs.run-e2e-tests-label-found || 'false' }} + run: | + if [[ "${GITHUB_EVENT_NAME}" == 'pull_request' ]]; then + # CCIP v1.6 E2E Tests run on merge queue (merge_group), not on PRs + echo "should-run=false" | tee -a "$GITHUB_OUTPUT" + + elif [[ "${GITHUB_EVENT_NAME}" == 'merge_group' ]]; then + # Run CCIP v1.6 E2E Tests in the merge queue, if there are relevant changes + echo "should-run=${CONTAINS_CHANGES}" | tee -a "$GITHUB_OUTPUT" + + elif [[ "${GITHUB_EVENT_NAME}" == 'workflow_dispatch' ]]; then + # Always Run CCIP v1.6 E2E Tests on workflow dispatch + echo "should-run=true" | tee -a "$GITHUB_OUTPUT" + + elif [[ "${GITHUB_EVENT_NAME}" == 'push' ]]; then + # Run CCIP v1.6 E2E Tests on push events, only if there are relevant changes or if it's a tag push + if [[ "${CONTAINS_CHANGES}" == 'true' || "${GITHUB_REF_TYPE}" == 'tag' ]]; then + echo "should-run=true" | tee -a "$GITHUB_OUTPUT" + else + echo "should-run=false" | tee -a "$GITHUB_OUTPUT" + fi + + else + echo "should-run=false" | tee -a "$GITHUB_OUTPUT" + fi + run-core-cre-e2e-tests: name: Run Core CRE E2E Tests needs: [build-chainlink, run-core-cre-e2e-tests-setup, compile-tests] @@ -491,6 +571,7 @@ jobs: chainlink_image_repository_path: ${{ inputs.ecr_name || 'chainlink-integration-tests' }} chainlink_version: ${{ inputs.evm-ref || inputs.cl_ref || github.sha }} chainlink_image_tag: ${{ inputs.evm-ref && format('{0}', inputs.evm-ref) || inputs.cl_ref && format('{0}', inputs.cl_ref) || format('{0}', github.sha) }} + test_matrix: ${{ needs.run-core-cre-e2e-tests-setup.outputs.cre-matrix }} secrets: inherit run-core-cre-e2e-regression-tests: @@ -536,47 +617,6 @@ jobs: base_ref_name: ${{ github.event.pull_request.base.ref }} secrets: inherit - run-ccip-v1-6-e2e-tests-setup: - name: Run CCIP v1.6 E2E Tests Setup - runs-on: ubuntu-latest - needs: [changes, labels] - permissions: - contents: read - outputs: - should-run: ${{ steps.form-inputs.outputs.should-run }} - steps: - - name: Form Inputs for CCIP v1.6 E2E Tests - id: form-inputs - env: - GITHUB_EVENT_NAME: ${{ github.event_name }} - GITHUB_REF_TYPE: ${{ github.ref_type }} - CONTAINS_CHANGES: ${{ needs.changes.outputs.ccip-changes == 'true' }} - RUN_E2E_TESTS_LABEL_FOUND: ${{ needs.labels.outputs.run-e2e-tests-label-found || 'false' }} - run: | - if [[ "${GITHUB_EVENT_NAME}" == 'pull_request' ]]; then - # CCIP v1.6 E2E Tests run on merge queue (merge_group), not on PRs - echo "should-run=false" | tee -a "$GITHUB_OUTPUT" - - elif [[ "${GITHUB_EVENT_NAME}" == 'merge_group' ]]; then - # Run CCIP v1.6 E2E Tests in the merge queue, if there are relevant changes - echo "should-run=${CONTAINS_CHANGES}" | tee -a "$GITHUB_OUTPUT" - - elif [[ "${GITHUB_EVENT_NAME}" == 'workflow_dispatch' ]]; then - # Always Run CCIP v1.6 E2E Tests on workflow dispatch - echo "should-run=true" | tee -a "$GITHUB_OUTPUT" - - elif [[ "${GITHUB_EVENT_NAME}" == 'push' ]]; then - # Run CCIP v1.6 E2E Tests on push events, only if there are relevant changes or if it's a tag push - if [[ "${CONTAINS_CHANGES}" == 'true' || "${GITHUB_REF_TYPE}" == 'tag' ]]; then - echo "should-run=true" | tee -a "$GITHUB_OUTPUT" - else - echo "should-run=false" | tee -a "$GITHUB_OUTPUT" - fi - - else - echo "should-run=false" | tee -a "$GITHUB_OUTPUT" - fi - # Central writer for the unified `integration-tests-v1` build cache consumed (restore-only) by # CRE smoke + regression matrices and CCIP test suites. # Keyed on go.sum hash to optimize parallel PR cache hits (Strategy A + B + C). @@ -586,12 +626,11 @@ jobs: ${{ github.actor != 'dependabot[bot]' && (needs.run-core-cre-e2e-tests-setup.outputs.should-run == 'true' || - needs.run-ccip-v1-6-e2e-tests-setup.outputs.should-run == 'true') + needs.run-core-cre-e2e-tests-setup.outputs.ccip-should-run == 'true') }} needs: - run-core-cre-e2e-tests-setup - - run-ccip-v1-6-e2e-tests-setup - runs-on: runs-on=${{ github.run_id }}-compile/cpu=32/ram=64/family=c7i+c8i/spot=co/volume=100GB/extras=s3-cache + runs-on: runs-on=${{ github.run_id }}-compile/cpu=32/ram=64/family=c8in+c6in/spot=co/volume=100gb:gp3:500mbs:4000iops/extras=s3-cache environment: name: integration deployment: false @@ -621,29 +660,33 @@ jobs: - name: Set up Go for compilation id: setup-go - uses: smartcontractkit/.github/actions/ctf-setup-go@fa1d48a33e24f9b3b9f8c52e99a578a4597cb2a5 # v0.4.0 + uses: actions/setup-go@v7 with: - # Key the cache on go.sum hash; restore-only on PRs to eliminate upload overhead and cache thrashing. - go_mod_path: ./system-tests/tests/go.mod - cache_key_id: integration-tests-v1 - cache_builds: true - cache_restore_only: ${{ github.ref_name != 'develop' }} - should_tidy: false - no_cache: false - gati_token: ${{ steps.github-token.outputs.access-token }} - - # No cache-hit short-circuit: ctf-setup-go@v0.4.0 exposes no `cache-hit` output, - # and this job's purpose is to (re)populate the shared build cache regardless. + go-version-file: system-tests/tests/go.mod + cache: true + cache-dependency-path: | + system-tests/tests/go.sum + integration-tests/go.sum + + - name: Configure Go private modules + shell: bash + run: go env -w GOPRIVATE=github.com/smartcontractkit/* + - name: Compile E2E tests shell: bash env: SHOULD_RUN_CRE: ${{ needs.run-core-cre-e2e-tests-setup.outputs.should-run }} - SHOULD_RUN_CCIP: ${{ needs.run-ccip-v1-6-e2e-tests-setup.outputs.should-run }} + SHOULD_RUN_CCIP: ${{ needs.run-core-cre-e2e-tests-setup.outputs.ccip-should-run }} run: | set -euo pipefail mkdir -p "$GITHUB_WORKSPACE/.gotmp" export GOTMPDIR="$GITHUB_WORKSPACE/.gotmp" + # Restored mod cache contains shallow VCS clones that can be in an + # inconsistent state after tar restore, breaking fetches of new + # pseudo-versions ("shallow file has changed since we read it"). + rm -rf "$(go env GOMODCACHE)/cache/vcs" + mkdir -p "$GITHUB_WORKSPACE/system-tests/tests/bin" mkdir -p "$GITHUB_WORKSPACE/integration-tests/bin" @@ -699,14 +742,14 @@ jobs: key: test-binaries-cre-${{ inputs.evm-ref || inputs.cl_ref || github.sha }} - name: Cache Pre-Compiled CCIP Test Binaries - if: needs.run-ccip-v1-6-e2e-tests-setup.outputs.should-run == 'true' + if: needs.run-core-cre-e2e-tests-setup.outputs.ccip-should-run == 'true' uses: actions/cache/save@v6 with: path: integration-tests/bin/ key: test-binaries-${{ inputs.evm-ref || inputs.cl_ref || github.sha }} run-ccip-v1-6-e2e-tests: - needs: [run-ccip-v1-6-e2e-tests-setup, build-chainlink, compile-tests] + needs: [run-core-cre-e2e-tests-setup, build-chainlink, compile-tests] name: Run CCIP v1.6 E2E Tests permissions: actions: read @@ -714,7 +757,7 @@ jobs: pull-requests: write id-token: write contents: read - if: needs.run-ccip-v1-6-e2e-tests-setup.outputs.should-run == 'true' + if: needs.run-core-cre-e2e-tests-setup.outputs.ccip-should-run == 'true' uses: ./.github/workflows/ccip-system-tests.yaml with: ecr: "sdlc" diff --git a/system-tests/lib/cre/don/config/config.go b/system-tests/lib/cre/don/config/config.go index eb1f324db4e..1de28a6ac64 100644 --- a/system-tests/lib/cre/don/config/config.go +++ b/system-tests/lib/cre/don/config/config.go @@ -270,6 +270,7 @@ func generateNodeTomlConfig(input cre.GenerateConfigsInput, nodeConfigTransforme func baseNodeConfig(commonInputs *commonInputs, donMetadata *cre.DonMetadata, nodeMetadata *cre.NodeMetadata) corechainlink.Config { c := corechainlink.Config{ Core: coretoml.Core{ + InsecureFastScrypt: new(true), Feature: coretoml.Feature{ LogPoller: new(true), }, diff --git a/system-tests/lib/cre/workflow/compile.go b/system-tests/lib/cre/workflow/compile.go index fea3d162ac6..d530889ad07 100644 --- a/system-tests/lib/cre/workflow/compile.go +++ b/system-tests/lib/cre/workflow/compile.go @@ -9,6 +9,7 @@ import ( "os/exec" "path/filepath" "strings" + "time" "github.com/andybalholm/brotli" "github.com/pkg/errors" @@ -111,12 +112,7 @@ func compileTSWorkflow(ctx context.Context, workflowFilePath, workflowName, outp func compileGoWorkflow(ctx context.Context, workflowFilePath, workflowName, outputDir string) (string, error) { workflowWasmPath := filepath.Join(outputDir, workflowName+".wasm") - - goModTidyCmd := exec.CommandContext(ctx, "go", "mod", "tidy") - goModTidyCmd.Dir = filepath.Dir(workflowFilePath) - if output, err := goModTidyCmd.CombinedOutput(); err != nil { - return "", errors.Wrapf(err, "failed to run go mod tidy: %s", string(output)) - } + compileStart := time.Now() compileCmd := exec.CommandContext(ctx, "go", "build", "-o", workflowWasmPath, filepath.Base(workflowFilePath)) // #nosec G204 -- we control the value of the cmd so the lint/sec error is a false positive compileCmd.Dir = filepath.Dir(workflowFilePath) @@ -125,6 +121,7 @@ func compileGoWorkflow(ctx context.Context, workflowFilePath, workflowName, outp fmt.Fprint(os.Stderr, string(output)) return "", errors.Wrap(err, "failed to compile workflow") } + fmt.Fprintf(os.Stderr, "compileGoWorkflow: %s took %s\n", workflowName, time.Since(compileStart)) workflowWasmAbsPath, workflowWasmAbsPathErr := filepath.Abs(workflowWasmPath) if workflowWasmAbsPathErr != nil { diff --git a/system-tests/lib/crypto/aptos.go b/system-tests/lib/crypto/aptos.go index a3c76b42768..0976683f37b 100644 --- a/system-tests/lib/crypto/aptos.go +++ b/system-tests/lib/crypto/aptos.go @@ -22,7 +22,7 @@ func NewAptosKey(password string) (*AptosKey, error) { return nil, fmt.Errorf("failed to create aptos key: %w", err) } - enc, err := key.ToEncryptedJSON(password, keystore.DefaultScryptParams) + enc, err := key.ToEncryptedJSON(password, keystore.FastScryptParams) if err != nil { return nil, fmt.Errorf("failed to encrypt aptos key: %w", err) } diff --git a/system-tests/lib/crypto/dkgrecipient.go b/system-tests/lib/crypto/dkgrecipient.go index e419cb40040..8c8116b858b 100644 --- a/system-tests/lib/crypto/dkgrecipient.go +++ b/system-tests/lib/crypto/dkgrecipient.go @@ -21,7 +21,7 @@ func NewDKGRecipientKey(password string) (*DKGRecipientKey, error) { if err != nil { return nil, err } - d, err := key.ToEncryptedJSON(password, keystore.DefaultScryptParams) + d, err := key.ToEncryptedJSON(password, keystore.FastScryptParams) if err != nil { return nil, err } diff --git a/system-tests/lib/crypto/p2p.go b/system-tests/lib/crypto/p2p.go index acb2a382cc0..a61227ab8fd 100644 --- a/system-tests/lib/crypto/p2p.go +++ b/system-tests/lib/crypto/p2p.go @@ -16,7 +16,7 @@ func NewP2PKey(password string) (*P2PKey, error) { if err != nil { return nil, err } - d, err := key.ToEncryptedJSON(password, keystore.DefaultScryptParams) + d, err := key.ToEncryptedJSON(password, keystore.FastScryptParams) if err != nil { return nil, err } diff --git a/system-tests/lib/crypto/sol.go b/system-tests/lib/crypto/sol.go index 848daf3d63d..f1d7a615db5 100644 --- a/system-tests/lib/crypto/sol.go +++ b/system-tests/lib/crypto/sol.go @@ -22,7 +22,7 @@ func NewSolKey(password, chainID string) (*SolKey, error) { return nil, fmt.Errorf("err create solkey: %w", err) } - enc, err := key.ToEncryptedJSON(password, keystore.DefaultScryptParams) + enc, err := key.ToEncryptedJSON(password, keystore.FastScryptParams) if err != nil { return nil, fmt.Errorf("failed to encrypt key: %w", err) } diff --git a/system-tests/lib/crypto/stellar.go b/system-tests/lib/crypto/stellar.go index 118e2d63437..37da0de3e37 100644 --- a/system-tests/lib/crypto/stellar.go +++ b/system-tests/lib/crypto/stellar.go @@ -25,7 +25,7 @@ func NewStellarKey(password string) (*StellarKey, error) { return nil, fmt.Errorf("failed to create stellar key: %w", err) } - enc, err := key.ToEncryptedJSON(password, keystore.DefaultScryptParams) + enc, err := key.ToEncryptedJSON(password, keystore.FastScryptParams) if err != nil { return nil, fmt.Errorf("failed to encrypt stellar key: %w", err) } diff --git a/system-tests/tests/smoke/cre/vault_don_test_helpers.go b/system-tests/tests/smoke/cre/vault_don_test_helpers.go index 34da3f4ac69..fed72586aa5 100644 --- a/system-tests/tests/smoke/cre/vault_don_test_helpers.go +++ b/system-tests/tests/smoke/cre/vault_don_test_helpers.go @@ -367,7 +367,7 @@ func setupVaultScenarioFixture(t *testing.T, baseConfig *ttypes.TestConfig, useP ensureVaultDKGResultPackages(t, testEnv) gatewayURL := mustVaultGatewayURL(t, testEnv) vaultPublicKey := FetchVaultPublicKey(t, gatewayURL.String()) - updateVaultCapabilityConfigInRegistry(t, testEnv, vaultPublicKey) + updateVaultCapabilityConfigInRegistry(t, testEnv, gatewayURL.String(), vaultPublicKey) return &vaultScenarioFixture{ TestEnv: testEnv, @@ -1455,7 +1455,7 @@ func executeVaultBinaryEncodedSharesSmokeTest( // so that the vault@1.0.0 capability config includes DefaultConfig with VaultPublicKey // and Threshold. This is required for workflows that call runtime.GetSecret(). // Uses the original deployer key (not per-test key) since the registry is owned by the deployer. -func updateVaultCapabilityConfigInRegistry(t *testing.T, testEnv *ttypes.TestEnvironment, vaultPublicKey string) { +func updateVaultCapabilityConfigInRegistry(t *testing.T, testEnv *ttypes.TestEnvironment, gatewayURL, vaultPublicKey string) { t.Helper() testLogger := framework.L testLogger.Info().Msg("Updating vault capability config in capabilities registry with VaultPublicKey...") @@ -1540,7 +1540,19 @@ func updateVaultCapabilityConfigInRegistry(t *testing.T, testEnv *ttypes.TestEnv require.NoError(t, err, "UpdateDONByName tx failed") testLogger.Info().Msg("Waiting for registry syncer to propagate the on-chain config change...") - time.Sleep(15 * time.Second) // registry syncer polls every 12s; one tick + margin + require.Eventually(t, func() bool { + uniqueRequestID := uuid.New().String() + getPublicKeyRequest := jsonrpc.Request[vault_helpers.GetPublicKeyRequest]{ + Version: jsonrpc.JsonRpcVersion, + ID: uniqueRequestID, + Method: vaulttypes.MethodPublicKeyGet, + Params: &vault_helpers.GetPublicKeyRequest{}, + } + requestBody, err := json.Marshal(getPublicKeyRequest) + require.NoError(t, err, "failed to marshal public key request") + statusCode, _ := sendVaultRequestToGateway(t, gatewayURL, requestBody) + return statusCode == http.StatusOK + }, time.Second*30, time.Second*1) } func allowlistRequest(t *testing.T, owner string, request jsonrpc.Request[json.RawMessage], sethClient *seth.Client, wfRegistryContract *workflow_registry_v2_wrapper.WorkflowRegistry) {