Skip to content

Merge pull request #109 from rl404/renovate/all-minor-patch #46

Merge pull request #109 from rl404/renovate/all-minor-patch

Merge pull request #109 from rl404/renovate/all-minor-patch #46

Workflow file for this run

name: publish & deploy
on:
push:
tags:
- "v*"
jobs:
publish_image:
name: Build and push shimakaze image
runs-on: ubuntu-latest
outputs:
img_tag: ${{ steps.tag.outputs.img_tag }}
steps:
- name: Check out code into the Go module directory
uses: actions/checkout@v4
- name: Remove 'v' from tag
id: tag
env:
github_ref: ${{ github.ref }}
run: |
github_ref=${github_ref##*/}
github_ref=${github_ref/v/}
echo "IMG_TAG=${github_ref}" >> $GITHUB_ENV
echo "img_tag=${github_ref}" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PASS }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.CR_PAT }}
- name: Auth gcloud
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.GCP_CREDENTIALS }}
- name: Setup gcloud
uses: google-github-actions/setup-gcloud@v1
- name: Setup docker
run: |
gcloud --quiet auth configure-docker
- name: Build and push image
uses: docker/build-push-action@v5
with:
context: .
file: ./build/package/Dockerfile
push: true
tags: |
rl404/shimakaze:latest
rl404/shimakaze:${{ env.IMG_TAG }}
ghcr.io/rl404/shimakaze:latest
ghcr.io/rl404/shimakaze:${{ env.IMG_TAG }}
${{ secrets.GCR_HOSTNAME }}/${{ secrets.GCP_PROJECT_ID }}/shimakaze:${{ env.IMG_TAG }}
deploy:
name: Deploy
needs: publish_image
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./deployment/terraform
steps:
- uses: actions/checkout@v4
- name: Auth gcloud
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.GCP_CREDENTIALS }}
- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
- name: Setup Terraform Variables
run: |-
cat > pipeline.auto.tfvars <<EOF
gcp_project_id = "${{ secrets.GCP_PROJECT_ID }}"
gcp_region = "${{ secrets.GCP_REGION }}"
gke_cluster_name = "${{ secrets.GKE_CLUSTER_NAME }}"
gke_location = "${{ secrets.GKE_LOCATION }}"
gke_pool_name = "${{ secrets.GKE_POOL_NAME }}"
gke_node_preemptible = "${{ secrets.GKE_NODE_PREEMPTIBLE }}"
gke_node_machine_type = "${{ secrets.GKE_NODE_MACHINE_TYPE }}"
gcr_image_name = "${{ secrets.GCR_HOSTNAME }}/${{ secrets.GCP_PROJECT_ID }}/shimakaze:${{ needs.publish_image.outputs.img_tag }}"
gke_deployment_consumer_name = "${{ secrets.GKE_DEPLOYMENT_CONSUMER_NAME }}"
gke_cron_fill_name = "${{ secrets.GKE_CRON_FILL_NAME }}"
gke_cron_fill_schedule = "${{ secrets.GKE_CRON_FILL_SCHEDULE }}"
gke_cron_update_name = "${{ secrets.GKE_CRON_UPDATE_NAME }}"
gke_cron_update_schedule = "${{ secrets.GKE_CRON_UPDATE_SCHEDULE }}"
cloud_run_name = "${{ secrets.CLOUD_RUN_NAME }}"
cloud_run_location = "${{ secrets.CLOUD_RUN_LOCATION }}"
shimakaze_cache_dialect = "${{ secrets.SHIMAKAZE_CACHE_DIALECT }}"
shimakaze_cache_address = "${{ secrets.SHIMAKAZE_CACHE_ADDRESS }}"
shimakaze_cache_password = "${{ secrets.SHIMAKAZE_CACHE_PASSWORD }}"
shimakaze_cache_time = "${{ secrets.SHIMAKAZE_CACHE_TIME }}"
shimakaze_db_address = "${{ secrets.SHIMAKAZE_DB_ADDRESS }}"
shimakaze_db_name = "${{ secrets.SHIMAKAZE_DB_NAME }}"
shimakaze_db_user = "${{ secrets.SHIMAKAZE_DB_USER }}"
shimakaze_db_password = "${{ secrets.SHIMAKAZE_DB_PASSWORD }}"
shimakaze_pubsub_dialect = "${{ secrets.SHIMAKAZE_PUBSUB_DIALECT }}"
shimakaze_pubsub_address = "${{ secrets.SHIMAKAZE_PUBSUB_ADDRESS }}"
shimakaze_pubsub_password = "${{ secrets.SHIMAKAZE_PUBSUB_PASSWORD }}"
shimakaze_cron_update_limit = "${{ secrets.SHIMAKAZE_CRON_UPDATE_LIMIT }}"
shimakaze_cron_fill_limit = "${{ secrets.SHIMAKAZE_CRON_FILL_LIMIT }}"
shimakaze_cron_agency_age = "${{ secrets.SHIMAKAZE_CRON_AGENCY_AGE }}"
shimakaze_cron_active_age = "${{ secrets.SHIMAKAZE_CRON_ACTIVE_AGE }}"
shimakaze_cron_retired_age = "${{ secrets.SHIMAKAZE_CRON_RETIRED_AGE }}"
shimakaze_youtube_key = "${{ secrets.SHIMAKAZE_YOUTUBE_KEY }}"
shimakaze_twitch_client_id = "${{ secrets.SHIMAKAZE_TWITCH_CLIENT_ID }}"
shimakaze_twitch_client_secret = "${{ secrets.SHIMAKAZE_TWITCH_CLIENT_SECRET }}"
shimakaze_log_json = "${{ secrets.SHIMAKAZE_LOG_JSON }}"
shimakaze_log_level = "${{ secrets.SHIMAKAZE_LOG_LEVEL }}"
shimakaze_newrelic_license_key = "${{ secrets.SHIMAKAZE_NEWRELIC_LICENSE_KEY }}"
EOF
- name: Init Terraform
run: terraform init -backend-config "bucket=${{ secrets.GCS_BUCKET }}"
env:
GOOGLE_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }}
- name: Format Terraform
run: terraform fmt -check
- name: Plan Terraform
run: terraform plan -input=false
env:
GOOGLE_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }}
- name: Apply Terraform
run: terraform apply -auto-approve -input=false
env:
GOOGLE_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }}