- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control. - Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities. - Created .gitmodules to include OpenZeppelin contracts as a submodule. - Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment. - Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks. - Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring. - Created scripts for resource import and usage validation across non-US regions. - Added tests for CCIP error handling and integration to ensure robust functionality. - Included various new files and directories for the orchestration portal and deployment scripts.
200 lines
6.0 KiB
YAML
200 lines
6.0 KiB
YAML
name: Deploy ChainID 138
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
environment:
|
|
description: 'Deployment environment'
|
|
required: true
|
|
default: 'staging'
|
|
type: choice
|
|
options:
|
|
- staging
|
|
- production
|
|
skip_infrastructure:
|
|
description: 'Skip infrastructure deployment'
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
skip_kubernetes:
|
|
description: 'Skip Kubernetes deployment'
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
skip_blockscout:
|
|
description: 'Skip Blockscout deployment'
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
skip_contracts:
|
|
description: 'Skip contract deployment'
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
skip_cloudflare:
|
|
description: 'Skip Cloudflare DNS configuration'
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
push:
|
|
branches:
|
|
- main
|
|
paths:
|
|
- 'scripts/deployment/**'
|
|
- 'terraform/**'
|
|
- 'k8s/**'
|
|
- '.github/workflows/deploy.yml'
|
|
|
|
env:
|
|
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
|
|
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
|
|
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
|
|
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
|
|
AZURE_RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }}
|
|
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
CLOUDFLARE_ZONE_ID: ${{ secrets.CLOUDFLARE_ZONE_ID }}
|
|
PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
|
|
RPC_URL: ${{ secrets.RPC_URL }}
|
|
EXPLORER_URL: ${{ secrets.EXPLORER_URL }}
|
|
|
|
jobs:
|
|
deploy:
|
|
name: Deploy ChainID 138
|
|
runs-on: ubuntu-latest
|
|
environment: ${{ github.event.inputs.environment || 'staging' }}
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Azure CLI
|
|
uses: azure/login@v1
|
|
with:
|
|
creds: ${{ secrets.AZURE_CREDENTIALS }}
|
|
|
|
- name: Set up Terraform
|
|
uses: hashicorp/setup-terraform@v3
|
|
with:
|
|
terraform_version: 1.6.0
|
|
|
|
- name: Set up kubectl
|
|
uses: azure/setup-kubectl@v3
|
|
version: 'latest'
|
|
|
|
- name: Set up Helm
|
|
uses: azure/setup-helm@v3
|
|
version: 'latest'
|
|
|
|
- name: Set up Foundry
|
|
uses: foundry-rs/foundry-toolchain@v1
|
|
with:
|
|
version: nightly
|
|
|
|
- name: Set up Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '20'
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y jq curl dnsutils
|
|
npm install -g ajv-cli
|
|
|
|
- name: Make scripts executable
|
|
run: chmod +x scripts/deployment/*.sh
|
|
|
|
- name: Create .env file
|
|
run: |
|
|
cat > .env << EOF
|
|
AZURE_SUBSCRIPTION_ID=${{ env.AZURE_SUBSCRIPTION_ID }}
|
|
AZURE_TENANT_ID=${{ env.AZURE_TENANT_ID }}
|
|
AZURE_CLIENT_ID=${{ env.AZURE_CLIENT_ID }}
|
|
AZURE_CLIENT_SECRET=${{ env.AZURE_CLIENT_SECRET }}
|
|
AZURE_RESOURCE_GROUP=${{ env.AZURE_RESOURCE_GROUP }}
|
|
CLOUDFLARE_API_TOKEN=${{ env.CLOUDFLARE_API_TOKEN }}
|
|
CLOUDFLARE_ZONE_ID=${{ env.CLOUDFLARE_ZONE_ID }}
|
|
PRIVATE_KEY=${{ env.PRIVATE_KEY }}
|
|
RPC_URL=${{ env.RPC_URL }}
|
|
EXPLORER_URL=${{ env.EXPLORER_URL }}
|
|
EOF
|
|
|
|
- name: Deploy infrastructure
|
|
if: ${{ !github.event.inputs.skip_infrastructure }}
|
|
run: |
|
|
./scripts/deployment/deploy-all.sh \
|
|
--skip-kubernetes \
|
|
--skip-blockscout \
|
|
--skip-contracts \
|
|
--skip-cloudflare
|
|
continue-on-error: true
|
|
|
|
- name: Configure Cloudflare DNS
|
|
if: ${{ !github.event.inputs.skip_cloudflare }}
|
|
run: |
|
|
# Get Application Gateway IP
|
|
APP_GATEWAY_IP=$(az network application-gateway show \
|
|
--resource-group ${{ env.AZURE_RESOURCE_GROUP }} \
|
|
--name $(cd terraform && terraform output -raw app_gateway_name) \
|
|
--query "frontendIPConfigurations[0].publicIpAddress.id" \
|
|
-o tsv | xargs az network public-ip show --ids --query ipAddress -o tsv)
|
|
|
|
./scripts/deployment/cloudflare-dns.sh \
|
|
--zone-id ${{ env.CLOUDFLARE_ZONE_ID }} \
|
|
--api-token ${{ env.CLOUDFLARE_API_TOKEN }} \
|
|
--ip $APP_GATEWAY_IP
|
|
continue-on-error: true
|
|
|
|
- name: Deploy Kubernetes resources
|
|
if: ${{ !github.event.inputs.skip_kubernetes }}
|
|
run: |
|
|
./scripts/deployment/deploy-all.sh \
|
|
--skip-infrastructure \
|
|
--skip-blockscout \
|
|
--skip-contracts \
|
|
--skip-cloudflare
|
|
continue-on-error: true
|
|
|
|
- name: Deploy Blockscout
|
|
if: ${{ !github.event.inputs.skip_blockscout }}
|
|
run: |
|
|
./scripts/deployment/deploy-all.sh \
|
|
--skip-infrastructure \
|
|
--skip-kubernetes \
|
|
--skip-contracts \
|
|
--skip-cloudflare
|
|
continue-on-error: true
|
|
|
|
- name: Deploy contracts
|
|
if: ${{ !github.event.inputs.skip_contracts }}
|
|
run: |
|
|
./scripts/deployment/deploy-all.sh \
|
|
--skip-infrastructure \
|
|
--skip-kubernetes \
|
|
--skip-blockscout \
|
|
--skip-cloudflare
|
|
continue-on-error: true
|
|
|
|
- name: Update token list
|
|
if: ${{ !github.event.inputs.skip_contracts }}
|
|
run: |
|
|
./scripts/deployment/update-token-list.sh
|
|
continue-on-error: true
|
|
|
|
- name: Verify deployment
|
|
run: |
|
|
./scripts/deployment/verify-deployment.sh
|
|
continue-on-error: true
|
|
|
|
- name: Upload deployment artifacts
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: deployment-artifacts
|
|
path: |
|
|
contracts-deployed.json
|
|
deployment.log
|
|
deployment-verification-report.md
|
|
retention-days: 30
|
|
|