This article will cover all things related to managing code in Github as part of the Data/Risk/Fraud team’s deployment and CI/CD pipelines to dev, stage and production environments.

The above diagram describes how the CI/CD pipeline will flow from development to Staging/Production:

  • Triggering a pull request, and merging to the main branch will trigger a Github action to upload the .zip artifact to Google Cloud Storage (GCS)

    • In future, we will enforce checks on top of this pull request - e.g. syntax check, code linting, etc.

  • The GCS is in the SaFi Repos project, which contains all the relevant builds and artifact for development

  • This will also cause the Dev Project to automatically pull the .zip artifact and deploy it to Cloud Functions

  • In order to push from to stage project, we will use git checkout with the git tag stage. The checkout enforces a git SHA of the commit, ensuring that it will only be deployed if the code name and the commit ID are correct

    • Similar process for production

(blue star) Implementation

How to set up your new Cloud Function:

  1. Create a gfunction-XXXXX.yml file under .github/workflows in Data Repo

  2. File name should follow this naming convention: gfunction-<environment>-<cloud function name>.yml

    1. E.g. gfunction-brave-decision-fraudlist-check.yml

  3. Specify the following important parameters inside the .yml file

    1. name

    2. paths under on”

    3. name and path under jobs:

      1. name refers to the name of the folder in the github repo containing the Cloud Function codes - namely main.py and requirements.txt

      2. path points to the parent folder of the above name folder

    4. name and under parameters under Deploy:

      1. name refers to the cloud function name

      2. Other cloud functions parameters can be specified with the appropriate values as well

Secrets parameters and values should never be specified in Cloud Functions. Instead they should be defined as part of GitHub Secrets as such. This is defined in the same .yml as above

Attachments:

~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~61cbdc0ff63ac80070187682~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
Untitled Diagram.drawio (application/vnd.jgraph.mxfile)
Untitled Diagram.drawio.png (image/png)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
Untitled Diagram.drawio (application/vnd.jgraph.mxfile)
Untitled Diagram.drawio.png (image/png)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
Untitled Diagram.drawio (application/vnd.jgraph.mxfile)
Untitled Diagram.drawio.png (image/png)
Screenshot 2023-01-10 at 3.57.13 PM.png (image/png)
Screenshot 2023-01-10 at 3.58.03 PM.png (image/png)
Screenshot 2023-01-10 at 4.00.18 PM.png (image/png)
Screenshot 2023-01-10 at 4.20.51 PM.png (image/png)