mirror of
https://github.com/MetaFam/TheGame.git
synced 2026-01-25 14:17:56 -05:00
205 lines
8.4 KiB
YAML
205 lines
8.4 KiB
YAML
name: Deploy Preview to Cloud Run
|
|
|
|
on:
|
|
pull_request:
|
|
types:
|
|
- opened
|
|
- reopened
|
|
- synchronize
|
|
|
|
env:
|
|
PROJECT_ID: metagame-thegame
|
|
REGISTRY_REGION: us-east4
|
|
REGISTRY_REPO: thegame
|
|
DEPLOYMENT_DOMAIN: a.run.app
|
|
CLOUDRUN_SUFFIX: mjhnbmqqna-uk
|
|
DB_NAME: hasura-pr-${{github.event.number}}
|
|
BACKEND_SERVICE: backend-pr-${{github.event.number}}
|
|
FRONTEND_SERVICE: frontend-pr-${{github.event.number}}
|
|
BACKEND_PORT: 4000
|
|
HASURA_PORT: 8080
|
|
FRONTEND_PORT: 3000
|
|
|
|
jobs:
|
|
build-and-deploy:
|
|
name: Build and Deploy
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: First Intepolation of Variables
|
|
run: |
|
|
echo "CLOUDRUN_REGION=${{env.REGISTRY_REGION}}" >> $GITHUB_ENV
|
|
echo "CLOUDSQL_INSTANCE_NAME=${{env.REGISTRY_REPO}}" >> $GITHUB_ENV
|
|
echo "CLOUDSQL_CONNECTION_NAME=${{env.PROJECT_ID}}:${{env.REGISTRY_REGION}}:${{env.REGISTRY_REPO}}" >> $GITHUB_ENV
|
|
echo "HASURA_SERVICE=${{env.DB_NAME}}" >> $GITHUB_ENV
|
|
echo "DOCKER_REGISTRY=${{env.REGISTRY_REGION}}-docker.pkg.dev" >> $GITHUB_ENV
|
|
echo "BACKEND_HOST=${{env.BACKEND_SERVICE}}-${{env.CLOUDRUN_SUFFIX}}.${{env.DEPLOYMENT_DOMAIN}}" >> $GITHUB_ENV
|
|
|
|
- name: Those Varaiables May Now Be Interpolated
|
|
run: |
|
|
echo "HASURA_HOST=${{env.HASURA_SERVICE}}-${{env.CLOUDRUN_SUFFIX}}.${{env.DEPLOYMENT_DOMAIN}}" >> $GITHUB_ENV
|
|
echo "DOCKER_PATH=${{env.DOCKER_REGISTRY}}/${{env.PROJECT_ID}}/${{env.REGISTRY_REPO}}" >> $GITHUB_ENV
|
|
echo "SC_MIGRATE_URL=https://${{env.BACKEND_HOST}}/actions/migrateSourceCredAccounts?force=true" >> $GITHUB_ENV
|
|
echo "FRONTEND_URL=https://${{env.FRONTEND_SERVICE}}-${{env.CLOUDRUN_SUFFIX}}.${{env.DEPLOYMENT_DOMAIN}}" >> $GITHUB_ENV
|
|
|
|
- name: And Again In Another Step
|
|
run: |
|
|
echo "GRAPHQL_URL=https://${{env.HASURA_HOST}}/v1/graphql" >> $GITHUB_ENV
|
|
echo "BACKEND_TAG=${{env.DOCKER_PATH}}/backend:pr-${{github.event.number}}" >> $GITHUB_ENV
|
|
echo "HASURA_TAG=${{env.DOCKER_PATH}}/hasura:pr-${{github.event.number}}" >> $GITHUB_ENV
|
|
echo "FRONTEND_TAG=${{env.DOCKER_PATH}}/frontend:pr-${{github.event.number}}" >> $GITHUB_ENV
|
|
echo "DB_PASSWORD=$(cat /dev/urandom | tr -cd [:alnum:] | head -c 16)" >> $GITHUB_ENV
|
|
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
with:
|
|
ref: ${{github.event.pull_request.head.sha}}
|
|
|
|
- name: Login to Registry
|
|
uses: docker/login-action@v1
|
|
with:
|
|
registry: ${{env.DOCKER_REGISTRY}}
|
|
username: _json_key
|
|
password: ${{secrets.GCP_SA_KEY}}
|
|
|
|
- name: Set up gcloud CLI
|
|
uses: google-github-actions/setup-gcloud@v0.2.1
|
|
with:
|
|
project_id: ${{env.PROJECT_ID}}
|
|
service_account_key: ${{secrets.GCP_SA_KEY}}
|
|
export_default_credentials: true
|
|
|
|
- name: Delete Database of Hasura
|
|
continue-on-error: true
|
|
run: |
|
|
wget -q https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
|
|
chmod u+x cloud_sql_proxy
|
|
./cloud_sql_proxy -instances ${{env.CLOUDSQL_CONNECTION_NAME}} -dir /tmp/cloudsql &
|
|
PID=$!
|
|
sleep 10
|
|
PGPASSWORD=${{secrets.GCP_POSTGRES_PASSWORD}} dropdb -h /tmp/cloudsql/${{env.CLOUDSQL_CONNECTION_NAME}} -U postgres ${{env.DB_NAME}} -f
|
|
kill $PID
|
|
|
|
- name: Create User and Database for Hasura
|
|
run: |
|
|
gcloud -q sql users create ${{env.DB_NAME}} -i ${{env.CLOUDSQL_INSTANCE_NAME}} --password ${{env.DB_PASSWORD}}
|
|
gcloud -q sql databases create ${{env.DB_NAME}} -i ${{env.CLOUDSQL_INSTANCE_NAME}}
|
|
|
|
- name: Undeploy Backend
|
|
continue-on-error: true
|
|
run: gcloud -q run services delete ${{env.BACKEND_SERVICE}} --region ${{env.CLOUDRUN_REGION}}
|
|
|
|
- name: Delete Backend Image
|
|
continue-on-error: true
|
|
run: gcloud -q artifacts docker images delete ${{env.BACKEND_TAG}}
|
|
|
|
- name: Build Backend Container
|
|
uses: mattes/cached-docker-build-action@v1
|
|
with:
|
|
args: '. -f ./docker/backend/Dockerfile --tag ${{env.BACKEND_TAG}} --build-arg GRAPHQL_URL=${{env.GRAPHQL_URL}}'
|
|
cache_key: "${{hashFiles('packages/backend/**')}}"
|
|
|
|
- name: Push Backend Container
|
|
run: docker push ${{env.BACKEND_TAG}}
|
|
|
|
- name: Deploy Backend
|
|
run: |
|
|
gcloud -q run deploy ${{env.BACKEND_SERVICE}} \
|
|
--image ${{env.BACKEND_TAG}} \
|
|
--region ${{env.CLOUDRUN_REGION}} \
|
|
--port ${{env.BACKEND_PORT}} \
|
|
--cpu 1 \
|
|
--memory 512Mi \
|
|
--ingress all \
|
|
--allow-unauthenticated \
|
|
--max-instances 1 \
|
|
--set-env-vars HASURA_GRAPHQL_ADMIN_SECRET=metagame_secret \
|
|
--set-env-vars GITHUB_API_TOKEN=${{secrets.GH_API_TOKEN}} \
|
|
--set-env-vars SOURCECRED_LEDGER_BRANCH=master \
|
|
--set-env-vars GRAPHQL_URL=${{env.GRAPHQL_URL}}
|
|
|
|
- name: Undeploy Hasura
|
|
continue-on-error: true
|
|
run: gcloud -q run services delete ${{env.HASURA_SERVICE}} --region ${{env.CLOUDRUN_REGION}}
|
|
|
|
- name: Delete Hasura Image
|
|
continue-on-error: true
|
|
run: gcloud -q artifacts docker images delete ${{env.HASURA_TAG}}
|
|
|
|
- name: Build Hasura Container
|
|
uses: mattes/cached-docker-build-action@v1
|
|
with:
|
|
args: './hasura -f ./hasura/Dockerfile --tag ${{env.HASURA_TAG}} --build-arg BACKEND_HOST=${{env.BACKEND_HOST}} --build-arg BACKEND_PROTOCOL=https'
|
|
cache_key: "${{hashFiles('hasura/**')}}"
|
|
|
|
- name: Push Hasura Container
|
|
run: docker push ${{env.HASURA_TAG}}
|
|
|
|
- name: Deploy Hasura
|
|
run: |
|
|
gcloud -q run deploy ${{env.HASURA_SERVICE}} \
|
|
--image ${{env.HASURA_TAG}} \
|
|
--region ${{env.CLOUDRUN_REGION}} \
|
|
--port ${{env.HASURA_PORT}} \
|
|
--cpu 1 \
|
|
--memory 512Mi \
|
|
--ingress all \
|
|
--allow-unauthenticated \
|
|
--add-cloudsql-instances ${{env.CLOUDSQL_CONNECTION_NAME}} \
|
|
--max-instances 1 \
|
|
--set-env-vars HASURA_GRAPHQL_DATABASE_URL=postgres://${{env.DB_NAME}}:${{env.DB_PASSWORD}}@/${{env.DB_NAME}}?host=/cloudsql/${{env.CLOUDSQL_CONNECTION_NAME}} \
|
|
--set-env-vars HASURA_GRAPHQL_ADMIN_SECRET=metagame_secret \
|
|
--set-env-vars HASURA_GRAPHQL_SERVER_PORT=${{env.HASURA_PORT}} \
|
|
--set-env-vars HASURA_GRAPHQL_ENABLE_CONSOLE=true
|
|
|
|
- name: Undeploy Frontend
|
|
continue-on-error: true
|
|
run: gcloud -q run services delete ${{env.FRONTEND_SERVICE}} --region ${{env.CLOUDRUN_REGION}}
|
|
|
|
- name: Delete Frontend Image
|
|
continue-on-error: true
|
|
run: gcloud -q artifacts docker images delete ${{env.FRONTEND_TAG}}
|
|
|
|
- name: Build Frontend Container
|
|
uses: mattes/cached-docker-build-action@v1
|
|
with:
|
|
args: '. -f ./docker/frontend/Dockerfile --tag ${{env.FRONTEND_TAG}} --build-arg GRAPHQL_URL=${{env.GRAPHQL_URL}}'
|
|
cache_key: "${{hashFiles('packages/web/**', 'packages/design-system/**')}}"
|
|
|
|
- name: Push Frontend Container
|
|
run: docker push ${{env.FRONTEND_TAG}}
|
|
|
|
- name: Deploy Frontend
|
|
run: |
|
|
gcloud -q run deploy ${{env.FRONTEND_SERVICE}} \
|
|
--image ${{env.FRONTEND_TAG}} \
|
|
--region ${{env.CLOUDRUN_REGION}} \
|
|
--port ${{env.FRONTEND_PORT}} \
|
|
--cpu 1 \
|
|
--memory 512Mi \
|
|
--ingress all \
|
|
--max-instances 1 \
|
|
--allow-unauthenticated \
|
|
--set-env-vars NEXT_PUBLIC_GRAPHQL_URL=${{env.GRAPHQL_URL}} \
|
|
--set-env-vars WEB3_STORAGE_TOKEN=${{secrets.WEB3_STORAGE_TOKEN}} \
|
|
--set-env-vars NEXT_PUBLIC_IMGIX_TOKEN=${{secrets.IMGIX_TOKEN}}
|
|
|
|
- name: Seed Database
|
|
run: |
|
|
mv package.json package.json.temp
|
|
npm install --no-package-lock --no-save node-fetch bottleneck
|
|
mv package.json.temp package.json
|
|
LOCAL_GRAPHQL_URL="${{env.GRAPHQL_URL}}" \
|
|
LOCAL_BACKEND_ACCOUNT_MIGRATION_URL="${{env.SC_MIGRATE_URL}}" \
|
|
yarn hasura:seed-local-db
|
|
|
|
- name: Comment on Pull Request
|
|
uses: thollander/actions-comment-pull-request@v1
|
|
with:
|
|
message: |
|
|
Successfully deployed a preview of this pull request:
|
|
|
|
* [Frontend](${{env.FRONTEND_URL}})
|
|
* [Hasura](//${{env.HASURA_HOST}})
|
|
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|