|
| 1 | +name: Copy PROD DB to QA |
| 2 | +on: |
| 3 | + workflow_dispatch: # Supports manual deployment |
| 4 | + inputs: |
| 5 | + dest_database_name: |
| 6 | + description: 'The name of the destination database (using MobilityDatabase will overwrite the current QA DB)' |
| 7 | + required: false |
| 8 | + default: 'MobilityDatabaseProdDuplicate' |
| 9 | + backup_db: |
| 10 | + description: 'Backup the current QA DB before importing the dump' |
| 11 | + required: false |
| 12 | + default: 'true' |
| 13 | + |
| 14 | +jobs: |
| 15 | + run-script: |
| 16 | + runs-on: ubuntu-latest |
| 17 | + env: |
| 18 | + SOURCE_PROJECT_ID: ${{ vars.PROD_MOBILITY_FEEDS_PROJECT_ID }} |
| 19 | + DEST_PROJECT_ID: ${{ vars.QA_MOBILITY_FEEDS_PROJECT_ID }} |
| 20 | + DUMP_BUCKET_NAME: "mobilitydata-database-dump-qa" |
| 21 | + BUCKET_PROJECT_ID: ${{ vars.QA_MOBILITY_FEEDS_PROJECT_ID }} |
| 22 | + GCP_REGION: ${{ vars.MOBILITY_FEEDS_REGION }} |
| 23 | + DB_INSTANCE_NAME: ${{ secrets.DB_INSTANCE_NAME }} |
| 24 | + DEST_DATABASE_PASSWORD: ${{ secrets.QA_POSTGRE_USER_PASSWORD }} |
| 25 | + DUMP_FILE_NAME: "prod-db-dump.sql" |
| 26 | + SOURCE_DATABASE_NAME: ${{ vars.PROD_POSTGRE_SQL_DB_NAME }} |
| 27 | + DEST_DATABASE_NAME: ${{ inputs.dest_database_name || 'MobilityDatabaseProdDuplicate' }} |
| 28 | + DEST_DATABASE_USER: ${{ secrets.QA_POSTGRE_USER_NAME }} |
| 29 | + DEST_DATABASE_IMPORT_USER: ${{ secrets.PROD_POSTGRE_USER_NAME }} |
| 30 | + GCP_FEED_BASTION_SSH_KEY: ${{ secrets.GCP_FEED_BASTION_SSH_KEY }} |
| 31 | + BACKUP_DB: ${{ inputs.backup_db || 'true' }} |
| 32 | + |
| 33 | + steps: |
| 34 | + - name: Checkout code |
| 35 | + uses: actions/checkout@v2 |
| 36 | + |
| 37 | + - name: Authenticate to Google Cloud PROD project |
| 38 | + id: gcloud_auth_prod |
| 39 | + uses: google-github-actions/auth@v2 |
| 40 | + with: |
| 41 | + credentials_json: ${{ secrets.PROD_GCP_MOBILITY_FEEDS_SA_KEY }} |
| 42 | + |
| 43 | + - name: GCloud Setup PROD |
| 44 | + uses: google-github-actions/setup-gcloud@v2 |
| 45 | + |
| 46 | + - name: Get PROD SQL service account |
| 47 | + run: | |
| 48 | + SERVICE_ACCOUNT=$(gcloud sql instances describe "mobilitydata-database-instance" --project=$SOURCE_PROJECT_ID --format="value(serviceAccountEmailAddress)") |
| 49 | + echo "SOURCE_SQL_SERVICE_ACCOUNT=$SERVICE_ACCOUNT" >> $GITHUB_ENV |
| 50 | + echo "Destination SQL Service Account: $SERVICE_ACCOUNT" |
| 51 | +
|
| 52 | + - name: Authenticate to Google Cloud QA project |
| 53 | + id: gcloud_auth_qa |
| 54 | + uses: google-github-actions/auth@v2 |
| 55 | + with: |
| 56 | + credentials_json: ${{ secrets.QA_GCP_MOBILITY_FEEDS_SA_KEY }} |
| 57 | + |
| 58 | + - name: GCloud Setup QA |
| 59 | + uses: google-github-actions/setup-gcloud@v2 |
| 60 | + |
| 61 | + - name: Create DB dump bucket and give permissions |
| 62 | + run: bash scripts/duplicate-prod-db/create-dump-bucket.sh |
| 63 | + |
| 64 | + - name: Authenticate to Google Cloud PROD project Again |
| 65 | + uses: google-github-actions/auth@v2 |
| 66 | + with: |
| 67 | + credentials_json: ${{ secrets.PROD_GCP_MOBILITY_FEEDS_SA_KEY }} |
| 68 | + |
| 69 | + - name: GCloud Setup PROD again |
| 70 | + uses: google-github-actions/setup-gcloud@v2 |
| 71 | + |
| 72 | + - name: Dump the PROD DB |
| 73 | + run: | |
| 74 | + gcloud sql export sql $DB_INSTANCE_NAME gs://$DUMP_BUCKET_NAME/$DUMP_FILE_NAME --database=$SOURCE_DATABASE_NAME --quiet |
| 75 | +
|
| 76 | + - name: Authenticate to Google Cloud QA project Again |
| 77 | + uses: google-github-actions/auth@v2 |
| 78 | + with: |
| 79 | + credentials_json: ${{ secrets.QA_GCP_MOBILITY_FEEDS_SA_KEY }} |
| 80 | + |
| 81 | + - name: GCloud Setup QA Again |
| 82 | + uses: google-github-actions/setup-gcloud@v2 |
| 83 | + |
| 84 | + - name: QA backup and import dump into the QA DB |
| 85 | + run: bash scripts/duplicate-prod-db/copy-prod-db-to-qa.sh |
| 86 | + |
| 87 | + - name: Load secrets from 1Password |
| 88 | + |
| 89 | + with: |
| 90 | + export-env: true # Export loaded secrets as environment variables |
| 91 | + env: |
| 92 | + OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} |
| 93 | + GCP_FEED_SSH_USER: "op://rbiv7rvkkrsdlpcrz3bmv7nmcu/GCP_FEED_SSH_USER/username" |
| 94 | + GCP_FEED_BASTION_NAME: "op://rbiv7rvkkrsdlpcrz3bmv7nmcu/GCP_FEED_BASTION_NAME/username" |
| 95 | + GCP_FEED_BASTION_SSH_KEY: "op://rbiv7rvkkrsdlpcrz3bmv7nmcu/GCP_FEED_BASTION_SSH_KEY/private key" |
| 96 | + |
| 97 | + - name: Tunnel and run SQL scripts on imported database |
| 98 | + run: bash scripts/duplicate-prod-db/post-import.sh |
| 99 | + |
0 commit comments