diff --git a/.github/workflows/deploy-api-to-akash.yml b/.github/workflows/deploy-api-to-akash.yml new file mode 100644 index 000000000..bf56ec271 --- /dev/null +++ b/.github/workflows/deploy-api-to-akash.yml @@ -0,0 +1,114 @@ +name: Deploy API to Akash + +on: + workflow_dispatch: + inputs: + tag: + description: 'Tag to deploy' + required: true + type: string + +concurrency: + group: ${{ github.workflow }} + +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 }}/${{ github.event.inputs.project-path }}/deploy-parsed.yaml + PROVIDER: ${{ vars.AKASH_PROVIDER }} + + SQL_PROXY_AUTH_TOKEN: ${{secrets.SQL_PROXY_AUTH_TOKEN}} + +jobs: + define-vars: + name: Define Variables + runs-on: ubuntu-latest + + outputs: + app: ${{ steps.vars.outputs.app }} + image: ${{ steps.vars.outputs.image }} + + steps: + - name: Define common variables + id: vars + run: | + tag=${{ github.event.inputs.tag }} + prerelease_type=$(echo "$tag" | sed -n 's/.*-\([a-zA-Z]*\).*/\1/p') + app="api-${prerelease_type:-prod}" + version="${tag#console-api/v}" + image="${{ vars.API_REGISTRY }}:$version" + + echo "app=${app}" + echo "image=${image}" + + echo "app=${app}" >> $GITHUB_OUTPUT + echo "image=${image}" >> $GITHUB_OUTPUT + + deploy-sandbox: + name: Deploy Sandbox + needs: define-vars + runs-on: ubuntu-latest + + permissions: + contents: write + packages: write + + steps: + - name: Deploy + 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: apps/api + 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: "ci@akash.network" + github-author-name: "CI" + github-token: ${{ secrets.GITHUB_TOKEN }} + + deploy-mainnet: + name: Deploy Mainnet + needs: [define-vars,deploy-sandbox] + runs-on: ubuntu-latest + + permissions: + contents: write + packages: write + + steps: + - name: Deploy + 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: apps/api + 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: "ci@akash.network" + github-author-name: "CI" + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release-all-apps.yml b/.github/workflows/release-all-apps.yml index dc8ea89ef..d18aa24df 100644 --- a/.github/workflows/release-all-apps.yml +++ b/.github/workflows/release-all-apps.yml @@ -9,7 +9,8 @@ concurrency: cancel-in-progress: true jobs: - build: + release: + name: Release runs-on: ubuntu-latest permissions: contents: write @@ -44,7 +45,11 @@ 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: | @@ -52,3 +57,18 @@ jobs: git config --global user.name "CI" 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 deployments + run: | + latest_api_tag=$(git tag --sort=-creatordate --merged | grep '^console-api/v' | head -n 1) + if [ -z "$latest_api_tag" ]; then + echo "No latest console-api tag found. Skipping api deployment." + else + echo "Dispatching deploy workflow for: $latest_api_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-api-to-akash.yml/dispatches \ + -d "{\"ref\": \"main\", \"inputs\": { \"tag\": \"$latest_api_tag\" }}" + fi + diff --git a/apps/api/deploy.yml b/apps/api/deploy.yaml similarity index 86% rename from apps/api/deploy.yml rename to apps/api/deploy.yaml index 0f632041c..986b95aeb 100644 --- a/apps/api/deploy.yml +++ b/apps/api/deploy.yaml @@ -3,16 +3,16 @@ version: "2.0" services: api: - image: : + 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: @@ -20,7 +20,7 @@ services: env: - KeyPath=/custom/proxy_key.json - ConnectionName=cloudmos-explorer:us-central1:cloudmos-postgresql - - Token= + - Token={{SQL_PROXY_AUTH_TOKEN}} command: - "sh" - "-c" @@ -47,7 +47,7 @@ profiles: cpu: units: 0.5 memory: - size: 512mi + size: 512Mi storage: size: 2Gi placement: