Skip to content

Merge pull request #194 from rl404/develop #15

Merge pull request #194 from rl404/develop

Merge pull request #194 from rl404/develop #15

Workflow file for this run

name: publish & deploy
on:
push:
tags:
- "v*"
jobs:
publish_image:
name: Build and push nyaa-x-discord 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@v2
with:
credentials_json: ${{ secrets.GCP_CREDENTIALS }}
- name: Setup gcloud
uses: google-github-actions/setup-gcloud@v2
- name: Setup docker
run: |
gcloud --quiet auth configure-docker
- name: Build and push image
uses: docker/build-push-action@v6
with:
context: .
file: ./build/package/Dockerfile
push: true
tags: |
rl404/nyaa-x-discord:latest
rl404/nyaa-x-discord:${{ env.IMG_TAG }}
ghcr.io/rl404/nyaa-x-discord:latest
ghcr.io/rl404/nyaa-x-discord:${{ env.IMG_TAG }}
${{ secrets.GCR_HOSTNAME }}/${{ secrets.GCP_PROJECT_ID }}/nyaa-x-discord:${{ 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@v2
with:
credentials_json: ${{ secrets.GCP_CREDENTIALS }}
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
- 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 }}"
gke_node_disk_size_gb = "${{ secrets.GKE_NODE_DISK_SIZE_GB }}"
gcr_image_name = "${{ secrets.GCR_HOSTNAME }}/${{ secrets.GCP_PROJECT_ID }}/nyaa-x-discord:${{ needs.publish_image.outputs.img_tag }}"
gke_deployment_name = "${{ secrets.GKE_DEPLOYMENT_NAME }}"
gke_cron_name = "${{ secrets.GKE_CRON_NAME }}"
gke_cron_schedule = "${{ secrets.GKE_CRON_SCHEDULE }}"
nxd_discord_prefix = "${{ secrets.NXD_DISCORD_PREFIX }}"
nxd_discord_token = "${{ secrets.NXD_DISCORD_TOKEN }}"
nxd_db_uri = "${{ secrets.NXD_DB_URI }}"
nxd_db_name = "${{ secrets.NXD_DB_NAME }}"
nxd_db_user = "${{ secrets.NXD_DB_USER }}"
nxd_db_password = "${{ secrets.NXD_DB_PASSWORD }}"
nxd_cron_interval = "${{ secrets.NXD_CRON_INTERVAL }}"
nxd_log_json = "${{ secrets.NXD_LOG_JSON }}"
nxd_log_level = "${{ secrets.NXD_LOG_LEVEL }}"
nxd_newrelic_name = "${{ secrets.NXD_NEWRELIC_NAME }}"
nxd_newrelic_license_key = "${{ secrets.NXD_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 }}