Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .github/actions/send_slack_notification/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Send Slack notification

inputs:
slack_webhook:
required: true

slack_title:
required: true

slack_message:
required: true

runs:
using: composite
steps:
- uses: rtCamp/action-slack-notify@v2
env:
SLACK_WEBHOOK: ${{ inputs.slack_webhook }}
SLACK_USERNAME: "ENSNode Bot"
SLACK_TITLE: ${{ inputs.slack_title }}
SLACK_MESSAGE: ${{ inputs.slack_message }}
SLACK_COLOR: good
157 changes: 85 additions & 72 deletions .github/workflows/deploy_ensnode.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ on:
workflow_dispatch:
inputs:
target:
description: 'Target environment (green or blue)'
description: "Target environment (green or blue)"
required: true
type: choice
options:
- green
- blue
tag:
description: 'Docker Image Tag (also used for schema name generation)'
description: "Docker Image Tag (also used for schema name generation)"
required: true
type: string

Expand All @@ -29,58 +29,65 @@ jobs:
RAILWAY_TEAM_TOKEN: ${{ secrets.RAILWAY_TEAM_TOKEN }}

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.ENSRAINBOW_DOCKER_IMAGE }} || { echo "Given docker image does not exist: ${{ env.ENSRAINBOW_DOCKER_IMAGE }}"; exit 1; }
docker manifest inspect ${{ env.ENSINDEXER_DOCKER_IMAGE }} || { echo "Given docker image does not exist: ${{ env.ENSINDEXER_DOCKER_IMAGE }}"; exit 1; }
docker manifest inspect ${{ env.ENSRAINBOW_DOCKER_IMAGE }} || { echo "Given docker image does not exist: ${{ env.ENSRAINBOW_DOCKER_IMAGE }}"; exit 1; }

- name: Print switch target
run: |
echo "Deploying on: $TARGET_ENVIRONMENT"
echo "Deploying on: $TARGET_ENVIRONMENT"

- name: Calculate env variables
run: |
case "$TARGET_ENVIRONMENT" in
"green")
#ENVIRONMENT
echo "RAILWAY_ENVIRONMENT_ID=${{ secrets.GREEN_RAILWAY_ENVIRONMENT_ID }}" >> $GITHUB_ENV
#ALPHA
echo "ALPHA_API_SVC_ID="${{ secrets.GREEN_ALPHA_API_SVC_ID }} >> "$GITHUB_ENV"
echo "ALPHA_INDEXER_SVC_ID="${{ secrets.GREEN_ALPHA_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#MAINNET
echo "MAINNET_API_SVC_ID="${{ secrets.GREEN_MAINNET_API_SVC_ID }} >> "$GITHUB_ENV"
echo "MAINNET_INDEXER_SVC_ID="${{ secrets.GREEN_MAINNET_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#SEPOLIA
echo "SEPOLIA_API_SVC_ID="${{ secrets.GREEN_SEPOLIA_API_SVC_ID }} >> "$GITHUB_ENV"
echo "SEPOLIA_INDEXER_SVC_ID="${{ secrets.GREEN_SEPOLIA_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#HOLESKY
echo "HOLESKY_API_SVC_ID="${{ secrets.GREEN_HOLESKY_API_SVC_ID }} >> "$GITHUB_ENV"
echo "HOLESKY_INDEXER_SVC_ID="${{ secrets.GREEN_HOLESKY_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#ENSRAINBOW
echo "ENSRAINBOW_SVC_ID="${{ secrets.GREEN_ENSRAINBOW_SVC_ID }} >> "$GITHUB_ENV"
;;
"blue")
#ENVIRONMENT
echo "RAILWAY_ENVIRONMENT_ID=${{ secrets.BLUE_RAILWAY_ENVIRONMENT_ID }}" >> $GITHUB_ENV
#ALPHA
echo "ALPHA_API_SVC_ID="${{ secrets.BLUE_ALPHA_API_SVC_ID }} >> "$GITHUB_ENV"
echo "ALPHA_INDEXER_SVC_ID="${{ secrets.BLUE_ALPHA_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#MAINNET
echo "MAINNET_API_SVC_ID="${{ secrets.BLUE_MAINNET_API_SVC_ID }} >> "$GITHUB_ENV"
echo "MAINNET_INDEXER_SVC_ID="${{ secrets.BLUE_MAINNET_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#SEPOLIA
echo "SEPOLIA_API_SVC_ID="${{ secrets.BLUE_SEPOLIA_API_SVC_ID }} >> "$GITHUB_ENV"
echo "SEPOLIA_INDEXER_SVC_ID="${{ secrets.BLUE_SEPOLIA_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#HOLESKY
echo "HOLESKY_API_SVC_ID="${{ secrets.BLUE_HOLESKY_API_SVC_ID }} >> "$GITHUB_ENV"
echo "HOLESKY_INDEXER_SVC_ID="${{ secrets.BLUE_HOLESKY_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#ENSRAINBOW
echo "ENSRAINBOW_SVC_ID="${{ secrets.BLUE_ENSRAINBOW_SVC_ID }} >> "$GITHUB_ENV"
;;
*)
echo "Environment not recognized, skipping workflow"
exit 1
esac
case "$TARGET_ENVIRONMENT" in
"green")
#ENVIRONMENT
echo "RAILWAY_ENVIRONMENT_ID=${{ secrets.GREEN_RAILWAY_ENVIRONMENT_ID }}" >> $GITHUB_ENV
#ALPHA
echo "ALPHA_API_SVC_ID="${{ secrets.GREEN_ALPHA_API_SVC_ID }} >> "$GITHUB_ENV"
echo "ALPHA_INDEXER_SVC_ID="${{ secrets.GREEN_ALPHA_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#MAINNET
echo "MAINNET_API_SVC_ID="${{ secrets.GREEN_MAINNET_API_SVC_ID }} >> "$GITHUB_ENV"
echo "MAINNET_INDEXER_SVC_ID="${{ secrets.GREEN_MAINNET_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#SEPOLIA
echo "SEPOLIA_API_SVC_ID="${{ secrets.GREEN_SEPOLIA_API_SVC_ID }} >> "$GITHUB_ENV"
echo "SEPOLIA_INDEXER_SVC_ID="${{ secrets.GREEN_SEPOLIA_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#HOLESKY
echo "HOLESKY_API_SVC_ID="${{ secrets.GREEN_HOLESKY_API_SVC_ID }} >> "$GITHUB_ENV"
echo "HOLESKY_INDEXER_SVC_ID="${{ secrets.GREEN_HOLESKY_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#ENSRAINBOW
echo "ENSRAINBOW_SVC_ID="${{ secrets.GREEN_ENSRAINBOW_SVC_ID }} >> "$GITHUB_ENV"
echo "SLACK_TITLE=':large_green_circle: GREEN environment is now having new ENSNode version - '"${{ env.TAG }} >> "$GITHUB_ENV"
;;
"blue")
#ENVIRONMENT
echo "RAILWAY_ENVIRONMENT_ID=${{ secrets.BLUE_RAILWAY_ENVIRONMENT_ID }}" >> $GITHUB_ENV
#ALPHA
echo "ALPHA_API_SVC_ID="${{ secrets.BLUE_ALPHA_API_SVC_ID }} >> "$GITHUB_ENV"
echo "ALPHA_INDEXER_SVC_ID="${{ secrets.BLUE_ALPHA_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#MAINNET
echo "MAINNET_API_SVC_ID="${{ secrets.BLUE_MAINNET_API_SVC_ID }} >> "$GITHUB_ENV"
echo "MAINNET_INDEXER_SVC_ID="${{ secrets.BLUE_MAINNET_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#SEPOLIA
echo "SEPOLIA_API_SVC_ID="${{ secrets.BLUE_SEPOLIA_API_SVC_ID }} >> "$GITHUB_ENV"
echo "SEPOLIA_INDEXER_SVC_ID="${{ secrets.BLUE_SEPOLIA_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#HOLESKY
echo "HOLESKY_API_SVC_ID="${{ secrets.BLUE_HOLESKY_API_SVC_ID }} >> "$GITHUB_ENV"
echo "HOLESKY_INDEXER_SVC_ID="${{ secrets.BLUE_HOLESKY_INDEXER_SVC_ID }} >> "$GITHUB_ENV"
#ENSRAINBOW
echo "ENSRAINBOW_SVC_ID="${{ secrets.BLUE_ENSRAINBOW_SVC_ID }} >> "$GITHUB_ENV"
echo "SLACK_TITLE=':large_blue_circle: BLUE environment is now having new ENSNode version - '"${{ env.TAG }} >> "$GITHUB_ENV"
;;
*)
echo "Environment not recognized, skipping workflow"
exit 1
esac

# Update indexer source docker image
- name: Update shared environment variable
Expand Down Expand Up @@ -147,30 +154,36 @@ jobs:

- name: Redeploy ENSNode instances
run: |
redeploy_service() {
local environment_id=$1
local service_id=$2
echo "Redeploying $service_id"
curl --request POST \
--silent \
--url https://backboard.railway.app/graphql/v2 \
--header 'Authorization: Bearer '${{ env.RAILWAY_TOKEN }} \
--header 'Content-Type: application/json' \
--data "{\"query\":\"mutation serviceInstanceDeploy(\$serviceId: String!, \$environmentId: String!) { serviceInstanceDeploy(serviceId: \$serviceId, environmentId: \$environmentId) }\",\"variables\":{\"environmentId\":\"${environment_id}\",\"serviceId\":\"${service_id}\"}}"
echo "Finished redeploying $service_id"
}
redeploy_service() {
local environment_id=$1
local service_id=$2
echo "Redeploying $service_id"
curl --request POST \
--silent \
--url https://backboard.railway.app/graphql/v2 \
--header 'Authorization: Bearer '${{ env.RAILWAY_TOKEN }} \
--header 'Content-Type: application/json' \
--data "{\"query\":\"mutation serviceInstanceDeploy(\$serviceId: String!, \$environmentId: String!) { serviceInstanceDeploy(serviceId: \$serviceId, environmentId: \$environmentId) }\",\"variables\":{\"environmentId\":\"${environment_id}\",\"serviceId\":\"${service_id}\"}}"
echo "Finished redeploying $service_id"
}

#ALPHA
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${ALPHA_API_SVC_ID}
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${ALPHA_INDEXER_SVC_ID}
#MAINNET
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${MAINNET_API_SVC_ID}
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${MAINNET_INDEXER_SVC_ID}
#SEPOLIA
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${SEPOLIA_API_SVC_ID}
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${SEPOLIA_INDEXER_SVC_ID}
#HOLESKY
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${HOLESKY_API_SVC_ID}
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${HOLESKY_INDEXER_SVC_ID}
#ENSRAINBOW
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${ENSRAINBOW_SVC_ID}

#ALPHA
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${ALPHA_API_SVC_ID}
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${ALPHA_INDEXER_SVC_ID}
#MAINNET
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${MAINNET_API_SVC_ID}
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${MAINNET_INDEXER_SVC_ID}
#SEPOLIA
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${SEPOLIA_API_SVC_ID}
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${SEPOLIA_INDEXER_SVC_ID}
#HOLESKY
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${HOLESKY_API_SVC_ID}
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${HOLESKY_INDEXER_SVC_ID}
#ENSRAINBOW
redeploy_service ${RAILWAY_ENVIRONMENT_ID} ${ENSRAINBOW_SVC_ID}
- uses: ./.github/actions/send_slack_notification
with:
slack_webhook: ${{ secrets.SLACK_WEBHOOK_URL }}
slack_title: ${{ env.SLACK_TITLE }}
slack_message: "✅ Deploy ENSNode completed"
58 changes: 41 additions & 17 deletions .github/workflows/deploy_switch_ensnode_environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
workflow_dispatch:
inputs:
target:
description: 'New main environment (green or blue)'
description: "New main environment (green or blue)"
required: true
type: choice
options:
Expand All @@ -19,31 +19,55 @@ jobs:
REDIS_URL: ${{ secrets.TRAEFIK_REDIS_URL }}

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Print switch target
run: |
echo "Switching to: $TARGET_ENVIRONMENT"
echo "Switching to: $TARGET_ENVIRONMENT"

- name: Install redis-cli
run: |
sudo apt install redis-tools
sudo apt install redis-tools

- name: Switch Traefik routers
run: |
# SEPOLIA
redis-cli -u $REDIS_URL SET traefik/http/routers/sepolia-api-router/service "${TARGET_ENVIRONMENT}-sepolia-api"
redis-cli -u $REDIS_URL SET traefik/http/routers/sepolia-indexer-router/service "${TARGET_ENVIRONMENT}-sepolia-indexer"
# SEPOLIA
redis-cli -u $REDIS_URL SET traefik/http/routers/sepolia-api-router/service "${TARGET_ENVIRONMENT}-sepolia-api"
redis-cli -u $REDIS_URL SET traefik/http/routers/sepolia-indexer-router/service "${TARGET_ENVIRONMENT}-sepolia-indexer"

# ALPHA
redis-cli -u $REDIS_URL SET traefik/http/routers/alpha-api-router/service "${TARGET_ENVIRONMENT}-alpha-api"
redis-cli -u $REDIS_URL SET traefik/http/routers/alpha-indexer-router/service "${TARGET_ENVIRONMENT}-alpha-indexer"

# ALPHA
redis-cli -u $REDIS_URL SET traefik/http/routers/alpha-api-router/service "${TARGET_ENVIRONMENT}-alpha-api"
redis-cli -u $REDIS_URL SET traefik/http/routers/alpha-indexer-router/service "${TARGET_ENVIRONMENT}-alpha-indexer"
# MAINNET
redis-cli -u $REDIS_URL SET traefik/http/routers/mainnet-api-router/service "${TARGET_ENVIRONMENT}-mainnet-api"
redis-cli -u $REDIS_URL SET traefik/http/routers/mainnet-indexer-router/service "${TARGET_ENVIRONMENT}-mainnet-indexer"

# MAINNET
redis-cli -u $REDIS_URL SET traefik/http/routers/mainnet-api-router/service "${TARGET_ENVIRONMENT}-mainnet-api"
redis-cli -u $REDIS_URL SET traefik/http/routers/mainnet-indexer-router/service "${TARGET_ENVIRONMENT}-mainnet-indexer"
# HOLESKY
redis-cli -u $REDIS_URL SET traefik/http/routers/holesky-api-router/service "${TARGET_ENVIRONMENT}-holesky-api"
redis-cli -u $REDIS_URL SET traefik/http/routers/holesky-indexer-router/service "${TARGET_ENVIRONMENT}-holesky-indexer"

# HOLESKY
redis-cli -u $REDIS_URL SET traefik/http/routers/holesky-api-router/service "${TARGET_ENVIRONMENT}-holesky-api"
redis-cli -u $REDIS_URL SET traefik/http/routers/holesky-indexer-router/service "${TARGET_ENVIRONMENT}-holesky-indexer"
# ENSRAINBOW
redis-cli -u $REDIS_URL SET traefik/http/routers/ensrainbow-api-router/service "${TARGET_ENVIRONMENT}-ensrainbow-api"

- name: Calculate env variables
run: |
case "$TARGET_ENVIRONMENT" in
"green")
echo "SLACK_TITLE=':large_green_circle: GREEN environment activated" >> "$GITHUB_ENV"
;;
"blue")
echo "SLACK_TITLE=':large_blue_circle: BLUE environment activated" >> "$GITHUB_ENV"
;;
*)
echo "SLACK_TITLE=':large_red_circle: Unrecognized environment activated" >> "$GITHUB_ENV"
esac

# ENSRAINBOW
redis-cli -u $REDIS_URL SET traefik/http/routers/ensrainbow-api-router/service "${TARGET_ENVIRONMENT}-ensrainbow-api"
- uses: ./.github/actions/send_slack_notification
with:
slack_webhook: ${{ secrets.SLACK_WEBHOOK_URL }}
slack_title: ${{ env.SLACK_TITLE }}
slack_message: "✅ Switch ENSNode environment completed"
6 changes: 6 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -191,3 +191,9 @@ jobs:
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- uses: ./.github/actions/send_slack_notification
with:
slack_webhook: ${{ secrets.SLACK_WEBHOOK_URL }}
slack_title: "ENSNode new version released: v${{ steps.get-pr.outputs.version }}"
slack_message: "✅ Release ENSNode completed"