Skip to content

Forge - Release GCP Deploy #12

Forge - Release GCP Deploy

Forge - Release GCP Deploy #12

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: "Forge - Release GCP Deploy"
on:
workflow_dispatch:
inputs:
release:
description: 'Release version'
required: true
jobs:
build:
name: "Build project"
runs-on: ubuntu-24.04
outputs:
release_version: ${{ github.event.inputs.release }}
steps:
- name: "πŸ“₯ Checkout repository"
uses: actions/checkout@v4
- name: "β˜•οΈ Setup JDK"
uses: actions/setup-java@v4
with:
distribution: 'liberica'
java-version: '17'
- name: "🐘 Setup Gradle"
uses: gradle/actions/setup-gradle@v4
with:
develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }}
- name: "🧩 Assemble"
working-directory: grails-forge
run: ./gradlew grails-cli:assemble
env:
TEST_BUILD_REPRODUCIBLE: "true"
deploy:
name: "Deploy to Google Cloud Run"
runs-on: ubuntu-24.04
needs: build
steps:
- name: "πŸ“₯ Checkout repository"
uses: actions/checkout@v4
- name: "β˜•οΈ Setup JDK"
uses: actions/setup-java@v4
with:
distribution: 'liberica'
java-version: '17'
- name: "🐘 Setup Gradle"
uses: gradle/actions/setup-gradle@v4
with:
develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }}
- name: "πŸ”‘ Login to Google Cloud"
uses: google-github-actions/auth@140bb5113ffb6b65a7e9b937a81fa96cf5064462
with:
credentials_json: ${{ secrets.GCP_CREDENTIALS }}
create_credentials_file: 'true'
- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@6a7c903a70c8625ed6700fa299f5ddb4ca6022e9
with:
project_id: ${{ secrets.GCP_PROJECT_ID }}
- name: "πŸ‹ Configure Docker for Artifact Registry"
run: gcloud auth configure-docker us-docker.pkg.dev --quiet
- name: "πŸƒ Run tests"
working-directory: grails-forge
run: >
./gradlew
grails-forge-api:test
grails-forge-web-netty:test
env:
TEST_BUILD_REPRODUCIBLE: "true"
- name: "πŸ”¨ Build Docker native image"
working-directory: grails-forge
env:
IMAGE_NAME: us-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/${{ secrets.GCP_APP_NAME }}/${{ secrets.GCP_APP_NAME }}:${{ needs.build.outputs.release_version }}
TEST_BUILD_REPRODUCIBLE: "true"
run: >
./gradlew
grails-forge-web-netty:dockerBuildNative
-PdockerImageName=${{ env.IMAGE_NAME }}
- name: "πŸ“€ Push Container to Google Cloud Artifact Registry"
env:
IMAGE_NAME: us-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/${{ secrets.GCP_APP_NAME }}/${{ secrets.GCP_APP_NAME }}:${{ needs.build.outputs.release_version }}
run: |
docker push ${{ env.IMAGE_NAME }}
- name: "πŸš€ Deploy Docker image"
env:
release_version: ${{ needs.build.outputs.release_version }}
IMAGE_NAME: us-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/${{ secrets.GCP_APP_NAME }}/${{ secrets.GCP_APP_NAME }}:${{ needs.build.outputs.release_version }}
run: |
gcloud run deploy ${{ secrets.GCP_PROJECT_ID }}-latest --image $IMAGE_NAME --region us-central1 --update-env-vars=HOSTNAME="latest.grails.org",CORS_ALLOWED_ORIGIN="https://start.grails.org",GITHUB_OAUTH_APP_CLIENT_ID=${{ secrets.GH_OAUTH_LATEST_CLIENT_ID }},GITHUB_OAUTH_APP_CLIENT_SECRET=${{ secrets.GH_OAUTH_LATEST_CLIENT_SECRET }},GITHUB_USER_AGENT=${{ secrets.GH_USER_AGENT }},GITHUB_REDIRECT_URL=${{ secrets.GH_REDIRECT_URL }} --platform managed --allow-unauthenticated --service-account=${{ secrets.GCLOUD_EMAIL }}
version="$(echo "${release_version//./}" | tr '[A-Z]' '[a-z]')"
gcloud run deploy ${{ secrets.GCP_PROJECT_ID }}-$version --image $IMAGE_NAME --region us-central1 --update-env-vars=HOSTNAME="grailsforge-600-cjmq3uyfcq-uc.a.run.app",CORS_ALLOWED_ORIGIN="https://start.grails.org",GITHUB_OAUTH_APP_CLIENT_ID=${{ secrets.GH_OAUTH_LATEST_CLIENT_ID }},GITHUB_OAUTH_APP_CLIENT_SECRET=${{ secrets.GH_OAUTH_LATEST_CLIENT_SECRET }},GITHUB_USER_AGENT=${{ secrets.GH_USER_AGENT }},GITHUB_REDIRECT_URL=${{ secrets.GH_REDIRECT_URL }} --platform managed --allow-unauthenticated --service-account=${{ secrets.GCLOUD_EMAIL }}
deployAnalytics:
name: "Deploy analytics to Google Cloud Run"
runs-on: ubuntu-24.04
needs: build
steps:
- name: "πŸ“₯ Checkout repository"
uses: actions/checkout@v4
- name: "β˜•οΈ Setup JDK"
uses: actions/setup-java@v4
with:
distribution: 'liberica'
java-version: '17'
- name: "🐘 Setup Gradle"
uses: gradle/actions/setup-gradle@v4
with:
develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }}
- name: "πŸ”‘ Login to Google Cloud"
uses: google-github-actions/auth@140bb5113ffb6b65a7e9b937a81fa96cf5064462
with:
credentials_json: ${{ secrets.GCP_CREDENTIALS }}
create_credentials_file: 'true'
- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@6a7c903a70c8625ed6700fa299f5ddb4ca6022e9
with:
project_id: ${{ secrets.GCP_PROJECT_ID }}
- name: "πŸ‹ Configure Docker for Artifact Registry"
run: gcloud auth configure-docker us-docker.pkg.dev --quiet
- name: "πŸƒ Run tests"
working-directory: grails-forge
run: >
./gradlew
grails-forge-analytics-postgres:test
env:
TEST_BUILD_REPRODUCIBLE: "true"
- name: "πŸ”¨ Build Docker native image"
working-directory: grails-forge
env:
IMAGE_NAME: us-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/${{ secrets.GCP_APP_NAME }}/${{ secrets.GCP_APP_NAME }}-analytics:${{ needs.build.outputs.release_version }}
TEST_BUILD_REPRODUCIBLE: "true"
run: >
./gradlew
grails-forge-analytics-postgres:dockerBuildNative
-PdockerImageName=${{ env.IMAGE_NAME }}
- name: "πŸ“€ Push Container to Google Cloud Artifact Registry"
env:
IMAGE_NAME: us-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/${{ secrets.GCP_APP_NAME }}/${{ secrets.GCP_APP_NAME }}-analytics:${{ needs.build.outputs.release_version }}
run: |
docker push ${{ env.IMAGE_NAME }}
- name: "πŸš€ Deploy Docker image"
env:
release_version: ${{ needs.build.outputs.release_version }}
IMAGE_NAME: us-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/${{ secrets.GCP_APP_NAME }}/${{ secrets.GCP_APP_NAME }}-analytics:${{ needs.build.outputs.release_version }}
run: |
gcloud components install beta --quiet
gcloud run deploy ${{ secrets.GCP_PROJECT_ID }}-analytics-latest --image $IMAGE_NAME --region us-central1 --platform managed --allow-unauthenticated --service-account=${{ secrets.GCLOUD_EMAIL }}
version="$(echo "${release_version//./}" | tr '[A-Z]' '[a-z]')"
gcloud run deploy ${{ secrets.GCP_PROJECT_ID }}-analytics-$version --image $IMAGE_NAME --region us-central1 --platform managed --allow-unauthenticated --service-account=${{ secrets.GCLOUD_EMAIL }}