What We're Building
Automated dApp deployment system triggered by git commits. When developers push updates to the repository, GitHub Actions automatically uploads the new version to IPFS via Filecoin Pin, then creates a Safe multi-sig proposal to update the ENS contenthash.
Reference: https://github.com/FIL-Builders/filecoin-pin-ens-demo
Target: https://github.com/safe-global/safe-wallet-monorepo
Trigger
Event: Developer commits and pushes dApp updates to main branch
Action: GitHub Actions workflow automatically executes:
- Build updated dApp
- Upload to IPFS via Filecoin Pin
- Verify gateway accessibility
- Create Safe proposal with new CID
Result: Safe signers receive proposal to update ENS to new version
Current Demo (Single Wallet)
Developer pushes to main branch
↓
.github/workflows/build-site.yml (triggered on push)
└─> Builds dApp → artifact: site-dist
↓
.github/workflows/upload-to-filecoin-and-update-ens.yml (workflow_run trigger)
├─> Download site-dist artifact
├─> filecoin-project/filecoin-pin/upload-action@v0.9.2 → CID
└─> scripts/update-ens.mjs
└─> wallet.sendTransaction(resolver.setContenthash())
↓
ENS contenthash updated immediately
New Flow (Safe Multi-Sig)
Developer pushes dApp updates to main branch
↓
.github/workflows/build-site.yml (triggered on push)
└─> Builds dApp → artifact: site-dist
↓
.github/workflows/upload-to-filecoin-and-update-ens.yml (workflow_run trigger)
├─> Download site-dist artifact
├─> filecoin-pin action → CID (keep existing)
├─> scripts/verify-ipfs-gateway.mjs (NEW - verify accessibility)
│ └─> Try ipfs.io, gateway.ipfs.io, dweb.link
│ └─> Retry up to 10 times with 6s delays
│ └─> Exit 1 if inaccessible → workflow fails
└─> scripts/create-safe-proposal.mjs (NEW - replaces update-ens.mjs)
└─> Safe API: propose resolver.setContenthash() transaction
↓
Safe signers review and approve in Safe UI
└─> Signers can test CID at https://ipfs.io/ipfs/{CID}
↓
Safe executes transaction when threshold met
└─> ENS contenthash updated
Key changes:
- Add gateway verification before Safe proposal
- Replace
update-ens.mjs with create-safe-proposal.mjs
- ENS update requires multi-sig approval instead of immediate update
What We're Building
Automated dApp deployment system triggered by git commits. When developers push updates to the repository, GitHub Actions automatically uploads the new version to IPFS via Filecoin Pin, then creates a Safe multi-sig proposal to update the ENS contenthash.
Reference: https://github.com/FIL-Builders/filecoin-pin-ens-demo
Target: https://github.com/safe-global/safe-wallet-monorepo
Trigger
Event: Developer commits and pushes dApp updates to main branch
Action: GitHub Actions workflow automatically executes:
Result: Safe signers receive proposal to update ENS to new version
Current Demo (Single Wallet)
New Flow (Safe Multi-Sig)
Key changes:
update-ens.mjswithcreate-safe-proposal.mjs