This repository was archived by the owner on Aug 5, 2026. It is now read-only.
Deploy: ENSNode to Yellow Environment on Render platform #5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "Deploy: ENSNode to Yellow Environment on Render platform" | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| tag: | |
| description: "Docker Image Tag (also used for schema name generation)" | |
| required: true | |
| type: string | |
| permissions: | |
| id-token: write | |
| contents: read | |
| jobs: | |
| deploy-environment: | |
| runs-on: blacksmith-4vcpu-ubuntu-2204 | |
| env: | |
| TARGET_ENVIRONMENT: "yellow" | |
| ENSINDEXER_DOCKER_IMAGE: "ghcr.io/namehash/ensnode/ensindexer:${{ inputs.tag }}" | |
| ENSAPI_DOCKER_IMAGE: "ghcr.io/namehash/ensnode/ensapi:${{ inputs.tag }}" | |
| ENSRAINBOW_DOCKER_IMAGE: "ghcr.io/namehash/ensnode/ensrainbow:${{ inputs.tag }}" | |
| ENSADMIN_DOCKER_IMAGE: "ghcr.io/namehash/ensnode/ensadmin:${{ inputs.tag }}" | |
| # Terraform related envs | |
| # AWS_REGION is required for aws-actions/configure-aws-credentials@v4 | |
| # Terraform keeps it's state inside S3 bucket. This bucket needs to be created before running Terraform apply. | |
| # AWS_REGION should be the same as Terraform S3 bucket state region. | |
| AWS_REGION: us-east-1 | |
| TF_VAR_ensnode_version: ${{ inputs.tag }} | |
| # ENSRainbow Searchlight instance allows setting label set version only, | |
| # while the label set ID is fixed to "searchlight". | |
| # ENSRainbow Subgraph has both label set ID and label set version fixed. | |
| TF_VAR_ensrainbow_searchlight_label_set_version: ${{ vars.ENSRAINBOW_SEARCHLIGHT_LABEL_SET_VERSION }} | |
| TF_VAR_db_schema_version: ${{ vars.DB_SCHEMA_VERSION }} | |
| TF_VAR_anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} | |
| # For now only one Terraform environment is active. In future this will be calculated based on workflow input. | |
| TF_VAR_render_environment: "yellow" | |
| TF_VAR_render_api_key: ${{ secrets.RENDER_API_KEY }} | |
| TF_VAR_render_owner_id: ${{ secrets.RENDER_OWNER_ID }} | |
| TF_VAR_alchemy_api_key: ${{ secrets.ALCHEMY_API_KEY }} | |
| TF_VAR_quicknode_api_key: ${{ secrets.QUICKNODE_API_KEY }} | |
| TF_VAR_quicknode_endpoint_name: ${{ secrets.QUICKNODE_ENDPOINT_NAME}} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 1 | |
| - name: Check if Docker images exists | |
| run: | | |
| docker manifest inspect ${{ env.ENSINDEXER_DOCKER_IMAGE }} || { echo "Given docker image does not exist: ${{ env.ENSINDEXER_DOCKER_IMAGE }}"; exit 1; } | |
| docker manifest inspect ${{ env.ENSAPI_DOCKER_IMAGE }} || { echo "Given docker image does not exist: ${{ env.ENSAPI_DOCKER_IMAGE }}"; exit 1; } | |
| docker manifest inspect ${{ env.ENSRAINBOW_DOCKER_IMAGE }} || { echo "Given docker image does not exist: ${{ env.ENSRAINBOW_DOCKER_IMAGE }}"; exit 1; } | |
| docker manifest inspect ${{ env.ENSADMIN_DOCKER_IMAGE }} || { echo "Given docker image does not exist: ${{ env.ENSADMIN_DOCKER_IMAGE }}"; exit 1; } | |
| - name: Setup Terraform | |
| uses: hashicorp/setup-terraform@v3 | |
| with: | |
| terraform_version: 1.6.0 | |
| - name: Configure AWS credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| role-to-assume: ${{ secrets.AWS_ROLE}} | |
| aws-region: ${{ env.AWS_REGION }} | |
| - name: Terraform Init | |
| run: terraform init | |
| working-directory: terraform | |
| - name: Terraform workspace | |
| run: terraform workspace select ${{env.TF_VAR_render_environment}} | |
| working-directory: terraform | |
| - name: Terraform Validate | |
| run: terraform validate | |
| working-directory: terraform | |
| - name: Terraform Plan | |
| run: terraform plan -out=tfplan | |
| working-directory: terraform | |
| - name: Terraform Apply | |
| run: terraform apply -auto-approve tfplan | |
| working-directory: terraform | |
| - uses: ./.github/actions/send_slack_notification | |
| with: | |
| slack_webhook: ${{ secrets.SLACK_WEBHOOK_URL }} | |
| slack_title: ${{ env.SLACK_TITLE }} | |
| slack_message: "✅ Deploy ENSNode completed" |