This Github action allows automated deployment of your Goblet application via Github Actions.
Goblet is a framework for writing serverless rest apis in python in google cloud. It allows you to quickly create and deploy python apis backed by cloudfunctions.
The parameters will be passed to the action through with
Name | Description | Required? |
---|---|---|
project | GCP project | Required |
location | GCP location | Required |
goblet-path | Path to a goblet app directory in which main.py , requirements.txt and .goblet\ should be stored |
Optional |
stage | Name of stage which should be used | Optional |
envars | list of key, value pairs that should be added to the function's environment variables (written as '{k1}:{v1},{k2}:{v2},...') | Optional |
build-envars | list of key, value pairs that should be added to the function's build environment variables (written as '{k1}:{v1},{k2}:{v2},...') | Optional |
command | Complete goblet command. For example "goblet openapi FUNCTION" | Optional |
artifact-auth | Enable authentication to Artifact Registry. | Optional |
poetry | [yes/no] enable use of poetry as dependency management. Default no. | Optional |
poetry_version | version for poetry. Default 1.1.14. | Optional |
requirements | Path and filename to requirements file for pip install. Default requirements.txt | Optional |
Name | Description |
---|---|
openapispec | The full string output of the generated openapispec if one was created |
-
Create a directory named
.github/workflow/
-
Create a YAML file, e.g. action_workflow.yml, and place it in the created directory above (requires a step
actions/checkout@v2
to get goblet app andgoogle-github-actions/auth@v0
to get credentials) -
Example content of the YAML file:
on:
push:
branches:
- main
name: Deploy Goblet App
jobs:
deploy:
name: deploy
runs-on: ubuntu-latest
env:
GCLOUD_PROJECT: GCLOUD_PROJECT
steps:
- name: checkout
uses: actions/checkout@v2
- id: 'auth'
uses: 'google-github-actions/auth@v0'
with:
workload_identity_provider: 'projects/123456789/locations/global/workloadIdentityPools/my-pool/providers/my-provider'
service_account: '[email protected]'
- name: goblet deploy
uses: anovis/[email protected]
id: deploy
with:
project: ${{ env.GCLOUD_PROJECT }}
location: us-central1
goblet-path: test
stage: dev
envars: |-
SLACK_WEBHOOK:slack,BILLING_ORG:bill,BILLING_ID:bill_id
- name: echo openapispec
run: |
echo "${{steps.deploy.outputs.openapispec}}"
The recommendation is to set the GCP service account json file as a GitHub secret in your GitHub repository. Make sure the service account has the correct permissions to deploy the desired components. At a miminum it should include
- roles/cloudfunctions.admin
- roles/iam.serviceAccountUser
Starting from version 3.0 a requirements file is mandatory (if not provided,
requirements.txt will be used). This is why goblet version parameter is no longer necessary.
The version for Goblet must be defined in the correspondant requirements file
as usually; eg:
goblet-gcp==0.10.0
In case of poetry=yes you should add also poetry_version argument
The install of dependencies defined in the requirements file is at the first step in the git-hub-action ensuring Goblet is installed at the moment of the deployment.
If you choose poetry, Goblet will not be installed at all unless you included it in the dependency install using poetry.