Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci(release): implement akash deployment #9

Merged
merged 1 commit into from
Oct 16, 2024
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
120 changes: 120 additions & 0 deletions .github/workflows/deploy-to-akash.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
name: Deploy to Akash

on:
workflow_dispatch:
inputs:
tag:
description: 'Tag to deploy'
required: true
type: string

concurrency:
group: ${{ github.workflow }}

jobs:
define-vars:
name: Define Variables
runs-on: ubuntu-latest

permissions:
contents: write
packages: write

outputs:
app: ${{ steps.vars.outputs.app }}
image: ${{ steps.vars.outputs.image }}
workspace: ${{ steps.vars.outputs.workspace }}
steps:
- name: Set app name
id: vars
env:
API_REGISTRY: ${{ vars.API_REGISTRY }}
WEB_REGISTRY: ${{ vars.WEB_REGISTRY }}
run: |
API_WORKSPACE="apps/api"
WEB_WORKSPACE="apps/deploy-web"

FULL_TAG="${{ github.event.inputs.tag }}"
IFS='/' read -r scope version <<< "$FULL_TAG"
prerelease_type=$(echo "$version" | sed -n 's/.*-\([a-zA-Z]*\).*/\1/p')
app="${scope#console-}"

registry_var="$(echo "$app" | tr '[:lower:]' '[:upper:]')_REGISTRY"
registry="${!registry_var}"

workspace_var="$(echo "$app" | tr '[:lower:]' '[:upper:]')_WORKSPACE"
workspace="${!workspace_var}"

app="${scope#console-}-${prerelease_type:-stable}"
version="${version#v}"
image="$registry:$version"

echo "workspace=${workspace}"
echo "app=${app}"
echo "image=${image}"

echo "workspace=${workspace}" >> $GITHUB_OUTPUT
echo "app=${app}" >> $GITHUB_OUTPUT
echo "image=${image}" >> $GITHUB_OUTPUT

deploy:
needs: define-vars
runs-on: ubuntu-latest

env:
ORG: akash-network
REPO: provider
CLIENT: provider-services
CLIENT_VERSION: 0.6.4
ARCH: linux_amd64
NET: mainnet
BLOCK_TIME: 1s
CHAIN_LATENCY: 30
AKASH_KEYRING_BACKEND: file
AKASH_BROADCAST_MODE: block
AKASH_YES: 1
AKASH_GAS_PRICES: 0.025uakt
AKASH_GAS: auto
AKASH_GAS_ADJUSTMENT: 1.5
AKASH_HOME: /home/runner/.akash
AKASH_FROM: default
AKASH_OUTPUT: json
MIN_BALANCE: 10
AKASH_GSEQ: 1
AKASH_OSEQ: 1
SDL: deploy.yaml
PARSED_SDL: ${{ github.workspace }}/${{ inputs.project-path }}/deploy-parsed.yaml
PROVIDER: ${{ inputs.provider }}

SQL_PROXY_AUTH_TOKEN: ${{secrets.SQL_PROXY_AUTH_TOKEN}}

steps:
- name: Deploy Sandbox
uses: akash-network/akash-deploy-action/.github/actions/deploy@main
env:
DOPPLER_TOKEN: ${{ secrets.DOPPLER_API_STAGING_SANDBOX_TOKEN }}
API_DOMAIN: ${{ vars.API_SANDBOX_STAGING_DOMAIN }}
with:
project-path: ${{ needs.define-vars.outputs.workspace }}
project-name: ${{ needs.define-vars.outputs.app }}-sandbox
image: ${{ needs.define-vars.outputs.image }}
seed: ${{ secrets.WALLET_MNEMONIC }}
password: ${{ secrets.WALLET_PASSWORD }}
github-author-email: "[email protected]"
github-author-name: "CI"
github-token: ${{ secrets.GITHUB_TOKEN }}

- name: Deploy Mainnet
uses: akash-network/akash-deploy-action/.github/actions/deploy@main
env:
DOPPLER_TOKEN: ${{ secrets.DOPPLER_API_STAGING_MAINNET_TOKEN }}
API_DOMAIN: ${{ vars.API_MAINNET_STAGING_DOMAIN }}
with:
project-path: ${{ needs.define-vars.outputs.workspace }}
project-name: ${{ needs.define-vars.outputs.app }}-mainnet
image: ${{ needs.define-vars.outputs.image }}
password: ${{ secrets.WALLET_PASSWORD }}
seed: ${{ secrets.WALLET_MNEMONIC }}
github-author-email: "[email protected]"
github-author-name: "CI"
github-token: ${{ secrets.GITHUB_TOKEN }}
43 changes: 42 additions & 1 deletion .github/workflows/release-all-apps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,52 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build the Docker images
- name: Get the latest tag
id: latest_tag
run: echo "value=$(git describe --tags --abbrev=0)" >> $GITHUB_OUTPUT

- name: Generate releases and build docker images
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config --global user.email "[email protected]"
git config --global user.name "Akash Network Team"
npm run release -w apps/api -- --preRelease=beta --verbose --ci -r ${{ vars.API_REGISTRY }}
npm run release -w apps/deploy-web -- --preRelease=beta -f --verbose --ci -r ${{ vars.WEB_REGISTRY }}

- name: Trigger Akash deployment
run: |
latest_tag=${{ steps.latest_tag.outputs.value }}
if [ -z "$latest_tag" ]; then
echo "No latest tag found. Iterating over all tags."
tags=$(git tag --sort=-creatordate --merged)
else
echo "Latest tag found: $latest_tag. Iterating over tags since latest tag."
tags=$(git tag --sort=-creatordate --merged | grep -v "$latest_tag")
fi

DEPLOYABLE_TAGS=("console-api")
tags_to_deploy=""

for tag in $tags; do
for deployable_tag in "${DEPLOYABLE_TAGS[@]}"; do
if [[ $tag == $deployable_tag* ]]; then
echo "Adding tag to deploy: $tag"
tags_to_deploy="$tags_to_deploy $tag"
fi
done
done

if [ -n "$tags_to_deploy" ]; then
for tag in $tags_to_deploy; do
echo "Dispatching deploy workflow for: $tag"
curl -X POST \
-H "Authorization: token ${{ secrets.AKASH_GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/${{ github.repository }}/actions/workflows/deploy-to-akash.yml/dispatches \
-d "{\"ref\": \"main\", \"inputs\": { \"tag\": \"$tag\" }}"
done
else
echo "No tags to deploy."
fi

12 changes: 6 additions & 6 deletions apps/api/deploy.yml → apps/api/deploy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,24 @@ version: "2.0"

services:
api:
image: <IMAGE_NAME>:<IMAGE_TAG>
image: {{IMAGE_NAME}}
depends-on: cloud-sql-proxy
env:
- DOPPLER_TOKEN=
- SENTRY_SERVER_NAME=
- DOPPLER_TOKEN={{DOPPLER_TOKEN}}
- SENTRY_SERVER_NAME=akash
expose:
- port: 3080
as: 80
accept:
- console-api-sandbox-staging.akash.network
- {{API_DOMAIN}}
to:
- global: true
cloud-sql-proxy:
image: redm4x/cloud-sql-proxy:1.31.2
env:
- KeyPath=/custom/proxy_key.json
- ConnectionName=cloudmos-explorer:us-central1:cloudmos-postgresql
- Token=<AUTH>
- Token={{SQL_PROXY_AUTH_TOKEN}}
command:
- "sh"
- "-c"
Expand All @@ -47,7 +47,7 @@ profiles:
cpu:
units: 0.5
memory:
size: 512mi
size: 512Mi
storage:
size: 2Gi
placement:
Expand Down
Loading