|
| 1 | +# E2E Test Workflow Setup |
| 2 | + |
| 3 | +This document explains how to set up and use the E2E test workflow on GitHub Actions. |
| 4 | + |
| 5 | +## Overview |
| 6 | + |
| 7 | +The E2E test workflow (`e2e.yml`) runs comprehensive end-to-end tests on Sepolia testnet. It's separate from the main CI workflow to avoid running blockchain tests on every PR. |
| 8 | + |
| 9 | +## Setup Instructions |
| 10 | + |
| 11 | +### 1. Add the Private Key Secret |
| 12 | + |
| 13 | +1. Go to your repository on GitHub |
| 14 | +2. Navigate to **Settings** → **Secrets and variables** → **Actions** |
| 15 | +3. Click **New repository secret** |
| 16 | +4. Name: `TEST_WALLET_PK` |
| 17 | +5. Value: `0x7ee18f54486d328745863e4ac29c4cdd3a325f7d53dec0324bfd57df4bfdf2a9` |
| 18 | +6. Click **Add secret** |
| 19 | + |
| 20 | +### 2. Fund the Test Wallet |
| 21 | + |
| 22 | +The test wallet must have Sepolia ETH to pay for gas: |
| 23 | + |
| 24 | +- **Wallet Address:** `0x2d5961897847A30559a26Db99789BEEc7AeEd75e` |
| 25 | +- **Recommended Balance:** At least 0.1 ETH (for multiple test runs) |
| 26 | + |
| 27 | +**Sepolia Faucets:** |
| 28 | +- https://sepoliafaucet.com/ |
| 29 | +- https://www.alchemy.com/faucets/ethereum-sepolia |
| 30 | +- https://cloud.google.com/application/web3/faucet/ethereum/sepolia |
| 31 | + |
| 32 | +### 3. Enable E2E Tests (Optional) |
| 33 | + |
| 34 | +For scheduled/automatic runs, create a repository variable: |
| 35 | + |
| 36 | +1. Go to **Settings** → **Secrets and variables** → **Actions** |
| 37 | +2. Navigate to the **Variables** tab |
| 38 | +3. Click **New repository variable** |
| 39 | +4. Name: `E2E_TESTS_ENABLED` |
| 40 | +5. Value: `true` |
| 41 | +6. Click **Add variable** |
| 42 | + |
| 43 | +**Note:** Manual triggers via workflow_dispatch don't require this variable. |
| 44 | + |
| 45 | +## Running the Tests |
| 46 | + |
| 47 | +### Manual Trigger |
| 48 | + |
| 49 | +1. Go to **Actions** tab in your repository |
| 50 | +2. Click on **E2E Tests** workflow in the left sidebar |
| 51 | +3. Click **Run workflow** button |
| 52 | +4. Select the branch (default: main) |
| 53 | +5. Click **Run workflow** |
| 54 | + |
| 55 | +### Automatic Schedule |
| 56 | + |
| 57 | +The workflow runs daily at 2 AM UTC if `E2E_TESTS_ENABLED` is set to `true`. |
| 58 | + |
| 59 | +### On Push to Main (Optional) |
| 60 | + |
| 61 | +Uncomment these lines in `.github/workflows/e2e.yml`: |
| 62 | + |
| 63 | +```yaml |
| 64 | +# push: |
| 65 | +# branches: [main] |
| 66 | +``` |
| 67 | + |
| 68 | +## Workflow Details |
| 69 | + |
| 70 | +### Trigger Events |
| 71 | + |
| 72 | +- **Manual:** Via workflow_dispatch (always available) |
| 73 | +- **Schedule:** Daily at 2 AM UTC (requires `E2E_TESTS_ENABLED=true`) |
| 74 | +- **Push:** Optional, commented out by default |
| 75 | + |
| 76 | +### Jobs |
| 77 | + |
| 78 | +**e2e-sepolia:** |
| 79 | +- Runs on Ubuntu latest |
| 80 | +- Uses Node.js 20.x |
| 81 | +- Timeout: 10 minutes |
| 82 | +- Requires `TEST_WALLET_PK` secret |
| 83 | + |
| 84 | +### Steps |
| 85 | + |
| 86 | +1. Checkout code |
| 87 | +2. Setup Node.js with npm cache |
| 88 | +3. Install dependencies |
| 89 | +4. Type check |
| 90 | +5. Build project |
| 91 | +6. Run E2E tests with `TEST_WALLET_PK` environment variable |
| 92 | +7. Upload artifacts on failure (logs, exported transactions) |
| 93 | + |
| 94 | +## Test Coverage |
| 95 | + |
| 96 | +The E2E test validates the complete Safe CLI workflow: |
| 97 | + |
| 98 | +1. ✅ Initialize config with Sepolia chain |
| 99 | +2. ✅ Import wallet with private key |
| 100 | +3. ✅ Create predicted Safe account (1-of-1) |
| 101 | +4. ✅ Deploy Safe to Sepolia blockchain |
| 102 | +5. ✅ Create a transaction (0.001 ETH transfer) |
| 103 | +6. ✅ Sign transaction with owner's key |
| 104 | +7. ✅ Export transaction to JSON file |
| 105 | +8. ✅ Import transaction from JSON file |
| 106 | +9. ✅ Execute transaction on-chain |
| 107 | + |
| 108 | +## Monitoring |
| 109 | + |
| 110 | +### Success |
| 111 | + |
| 112 | +Green checkmark in Actions tab indicates all steps passed. |
| 113 | + |
| 114 | +### Failure |
| 115 | + |
| 116 | +- Red X in Actions tab |
| 117 | +- Click on the failed run to see logs |
| 118 | +- Artifacts (logs, exported JSON) are uploaded for 7 days |
| 119 | +- Check the specific step that failed |
| 120 | + |
| 121 | +### Common Issues |
| 122 | + |
| 123 | +**Insufficient Funds:** |
| 124 | +- Ensure test wallet has enough Sepolia ETH |
| 125 | +- Each run deploys a new Safe and executes a transaction |
| 126 | + |
| 127 | +**Network Issues:** |
| 128 | +- Sepolia RPC may be congested |
| 129 | +- Retry the workflow |
| 130 | +- Check Sepolia network status |
| 131 | + |
| 132 | +**Timeout:** |
| 133 | +- Increase timeout in workflow (currently 10 minutes) |
| 134 | +- Blockchain operations may take longer during network congestion |
| 135 | + |
| 136 | +## Security Notes |
| 137 | + |
| 138 | +⚠️ **Important Security Considerations:** |
| 139 | + |
| 140 | +1. **Test Wallet Only:** This private key is ONLY for Sepolia testnet |
| 141 | +2. **Never Use on Mainnet:** The private key is for testing purposes only |
| 142 | +3. **No Real Funds:** Only use Sepolia test ETH, never real funds |
| 143 | +4. **Secret Management:** GitHub Secrets are encrypted and not exposed in logs |
| 144 | +5. **Limited Access:** Only repository admins can view/edit secrets |
| 145 | + |
| 146 | +## Cost Management |
| 147 | + |
| 148 | +Each E2E test run: |
| 149 | +- Deploys a new Safe contract (~0.01-0.02 ETH gas) |
| 150 | +- Executes one transaction (~0.001-0.005 ETH gas) |
| 151 | +- Total cost per run: ~0.015-0.03 Sepolia ETH |
| 152 | + |
| 153 | +**Recommendations:** |
| 154 | +- Monitor wallet balance regularly |
| 155 | +- Refill when balance drops below 0.05 ETH |
| 156 | +- Disable scheduled runs if not needed (set `E2E_TESTS_ENABLED=false`) |
| 157 | + |
| 158 | +## Maintenance |
| 159 | + |
| 160 | +### Updating the Test Wallet |
| 161 | + |
| 162 | +To use a different wallet: |
| 163 | + |
| 164 | +1. Generate new private key |
| 165 | +2. Update `TEST_WALLET_PK` secret in GitHub |
| 166 | +3. Update expected address in test file comments |
| 167 | +4. Fund new wallet with Sepolia ETH |
| 168 | + |
| 169 | +### Disabling Scheduled Runs |
| 170 | + |
| 171 | +1. Delete the `E2E_TESTS_ENABLED` variable, OR |
| 172 | +2. Set `E2E_TESTS_ENABLED=false` |
| 173 | + |
| 174 | +Manual triggers will still work. |
| 175 | + |
| 176 | +### Modifying the Schedule |
| 177 | + |
| 178 | +Edit the cron expression in `e2e.yml`: |
| 179 | + |
| 180 | +```yaml |
| 181 | +schedule: |
| 182 | + - cron: '0 2 * * *' # Daily at 2 AM UTC |
| 183 | +``` |
| 184 | +
|
| 185 | +**Examples:** |
| 186 | +- `'0 */6 * * *'` - Every 6 hours |
| 187 | +- `'0 2 * * 1'` - Weekly on Monday at 2 AM |
| 188 | +- `'0 2 1 * *'` - Monthly on the 1st at 2 AM |
| 189 | +
|
| 190 | +## Troubleshooting |
| 191 | +
|
| 192 | +### Test is Skipped |
| 193 | +
|
| 194 | +**Cause:** `TEST_WALLET_PK` environment variable not set |
| 195 | + |
| 196 | +**Solution:** |
| 197 | +- Verify secret exists in repository settings |
| 198 | +- Check secret name is exactly `TEST_WALLET_PK` |
| 199 | +- Ensure workflow has access to secrets |
| 200 | + |
| 201 | +### "Insufficient funds for gas * price + value" |
| 202 | + |
| 203 | +**Cause:** Wallet doesn't have enough Sepolia ETH |
| 204 | + |
| 205 | +**Solution:** |
| 206 | +- Check wallet balance on Sepolia Etherscan |
| 207 | +- Fund wallet using faucets listed above |
| 208 | +- Wait for funds to confirm before re-running |
| 209 | + |
| 210 | +### Test Times Out |
| 211 | + |
| 212 | +**Cause:** Blockchain operations taking too long |
| 213 | + |
| 214 | +**Solution:** |
| 215 | +- Check Sepolia network status |
| 216 | +- Increase timeout in workflow YAML |
| 217 | +- Retry the workflow |
| 218 | + |
| 219 | +### Artifact Upload Failed |
| 220 | + |
| 221 | +**Cause:** No matching artifacts found (expected on success) |
| 222 | + |
| 223 | +**Solution:** |
| 224 | +- This is normal when tests pass |
| 225 | +- Artifacts only upload on failure |
| 226 | +- No action needed |
| 227 | + |
| 228 | +## Support |
| 229 | + |
| 230 | +For issues or questions: |
| 231 | +- Check test logs in GitHub Actions |
| 232 | +- Review test implementation in `src/tests/integration/e2e-flow.test.ts` |
| 233 | +- Check E2E test documentation in `src/tests/integration/E2E_README.md` |
0 commit comments