Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix deploy preview #2513

Merged
merged 1 commit into from
Feb 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
191 changes: 108 additions & 83 deletions .github/workflows/deploy-frontend-pr-previews.yml
Original file line number Diff line number Diff line change
Expand Up @@ -497,69 +497,69 @@ jobs:
})

### deploy website preview ###
website:
name: build-push-website-deploy-preview
needs: [check]
if: needs.check.outputs.run_website == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Login to GCR
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY_URL }}
username: _json_key
password: ${{ secrets.GCP_FRONTEND_PROJECT_SA_CREDENTIALS }}

- name: Google login
uses: google-github-actions/auth@v1
with:
credentials_json: "${{ secrets.GCP_FRONTEND_PROJECT_SA_CREDENTIALS }}"

- name: Setup Cloud SDK(gcloud)
uses: "google-github-actions/setup-gcloud@v1"

- name: Create google_application_credentials.json file
id: create-google-application-credentials-file
uses: jsdaniell/[email protected]
with:
name: "google_application_credentials.json"
json: ${{ secrets.GCP_FRONTEND_PROJECT_SA_CREDENTIALS }}
dir: "src/website/"

- name: Create app.yaml and .env.yaml files
run: |
cd src/website/
echo "========== Creating app.yaml file =========="
echo "runtime: python" > app.yaml
echo "env: flex" >> app.yaml
echo "service: website-pr-previews" >> app.yaml
echo "includes:" >> app.yaml
echo " - .env.yaml" >> app.yaml
echo "automatic_scaling:" >> app.yaml
echo " cool_down_period_sec: 120" >> app.yaml
echo " min_num_instances: 1" >> app.yaml
echo " max_num_instances: 3" >> app.yaml
echo " cpu_utilization:" >> app.yaml
echo " target_utilization: 0.8" >> app.yaml
echo "runtime_config:" >> app.yaml
echo " operating_system: \"ubuntu22\"" >> app.yaml
echo " runtime_version: \"3.12\"" >> app.yaml
echo "========== Creating .env.yaml file =========="
echo "env_variables:" > .env.yaml
echo " SECRET: ${{ secrets.WEBSITE_SECRET }}" >> .env.yaml
echo " CLOUDINARY_KEY: ${{ secrets.WEBSITE_CLOUDINARY_KEY }}" >> .env.yaml
echo " CLOUDINARY_NAME: ${{ secrets.WEBSITE_CLOUDINARY_NAME }}" >> .env.yaml
echo " CLOUDINARY_SECRET: ${{ secrets.WEBSITE_CLOUDINARY_SECRET }}" >> .env.yaml
echo " DATABASE_URI: ${{ secrets.WEBSITE_DEV_DATABASE_URI }}" >> .env.yaml
echo " GS_BUCKET_NAME: ${{ secrets.WEBSITE_DEV_GS_BUCKET_NAME }}" >> .env.yaml
echo " REACT_WEB_STATIC_HOST: ${{ secrets.WEBSITE_DEV_REACT_WEB_STATIC_HOST }}" >> .env.yaml
echo " SECRET_KEY: ${{ secrets.WEBSITE_STAGE_SECRET_KEY }}" >> .env.yaml
echo " DJANGO_ALLOWED_HOSTS: ${{ secrets.WEBSITE_DJANGO_ALLOWED_HOSTS }}" >> .env.yaml
echo " DEBUG: False" >> .env.yaml
echo " GOOGLE_APPLICATION_CREDENTIALS: /app/google_application_credentials.json" >> .env.yaml
# website:
# name: build-push-website-deploy-preview
# needs: [check]
# if: needs.check.outputs.run_website == 'true'
# runs-on: ubuntu-latest
# steps:
# - name: Checkout
# uses: actions/checkout@v3

# - name: Login to GCR
# uses: docker/login-action@v2
# with:
# registry: ${{ env.REGISTRY_URL }}
# username: _json_key
# password: ${{ secrets.GCP_FRONTEND_PROJECT_SA_CREDENTIALS }}

# - name: Google login
# uses: google-github-actions/auth@v1
# with:
# credentials_json: "${{ secrets.GCP_FRONTEND_PROJECT_SA_CREDENTIALS }}"

# - name: Setup Cloud SDK(gcloud)
# uses: "google-github-actions/setup-gcloud@v1"

# - name: Create google_application_credentials.json file
# id: create-google-application-credentials-file
# uses: jsdaniell/[email protected]
# with:
# name: "google_application_credentials.json"
# json: ${{ secrets.GCP_FRONTEND_PROJECT_SA_CREDENTIALS }}
# dir: "src/website/"

# - name: Create app.yaml and .env.yaml files
# run: |
# cd src/website/
# echo "========== Creating app.yaml file =========="
# echo "runtime: python" > app.yaml
# echo "env: flex" >> app.yaml
# echo "service: website-pr-previews" >> app.yaml
# echo "includes:" >> app.yaml
# echo " - .env.yaml" >> app.yaml
# echo "automatic_scaling:" >> app.yaml
# echo " cool_down_period_sec: 120" >> app.yaml
# echo " min_num_instances: 1" >> app.yaml
# echo " max_num_instances: 3" >> app.yaml
# echo " cpu_utilization:" >> app.yaml
# echo " target_utilization: 0.8" >> app.yaml
# echo "runtime_config:" >> app.yaml
# echo " operating_system: \"ubuntu22\"" >> app.yaml
# echo " runtime_version: \"3.12\"" >> app.yaml
# echo "========== Creating .env.yaml file =========="
# echo "env_variables:" > .env.yaml
# echo " SECRET: ${{ secrets.WEBSITE_SECRET }}" >> .env.yaml
# echo " CLOUDINARY_KEY: ${{ secrets.WEBSITE_CLOUDINARY_KEY }}" >> .env.yaml
# echo " CLOUDINARY_NAME: ${{ secrets.WEBSITE_CLOUDINARY_NAME }}" >> .env.yaml
# echo " CLOUDINARY_SECRET: ${{ secrets.WEBSITE_CLOUDINARY_SECRET }}" >> .env.yaml
# echo " DATABASE_URI: ${{ secrets.WEBSITE_DEV_DATABASE_URI }}" >> .env.yaml
# echo " GS_BUCKET_NAME: ${{ secrets.WEBSITE_DEV_GS_BUCKET_NAME }}" >> .env.yaml
# echo " REACT_WEB_STATIC_HOST: ${{ secrets.WEBSITE_DEV_REACT_WEB_STATIC_HOST }}" >> .env.yaml
# echo " SECRET_KEY: ${{ secrets.WEBSITE_STAGE_SECRET_KEY }}" >> .env.yaml
# echo " DJANGO_ALLOWED_HOSTS: ${{ secrets.WEBSITE_DJANGO_ALLOWED_HOSTS }}" >> .env.yaml
# echo " DEBUG: False" >> .env.yaml
# echo " GOOGLE_APPLICATION_CREDENTIALS: /app/google_application_credentials.json" >> .env.yaml

# - name: Build and Push Docker Image
# run: |
Expand Down Expand Up @@ -594,21 +594,21 @@ jobs:
# gcloud app versions delete "$version" --service=$service --quiet
# done

website-pr-comment:
name: website-preview-link-comment
if: needs.check.outputs.run_website == 'true'
needs: [website]
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v6
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: 'New Website changes available for preview [here](https://website-pr-previews-dot-airqo-frontend.appspot.com)'
})
# website-pr-comment:
# name: website-preview-link-comment
# if: needs.check.outputs.run_website == 'true'
# needs: [website]
# runs-on: ubuntu-latest
# steps:
# - uses: actions/github-script@v6
# with:
# script: |
# github.rest.issues.createComment({
# issue_number: context.issue.number,
# owner: context.repo.owner,
# repo: context.repo.repo,
# body: 'New Website changes available for preview [here](https://website-pr-previews-dot-airqo-frontend.appspot.com)'
# })

### deploy website2 preview ###
website2:
Expand Down Expand Up @@ -687,11 +687,36 @@ jobs:
- name: Delete Old Versions
run: |-
service="website-pr-previews"
versions=$(gcloud app versions list --service=$service --sort-by '~LAST_DEPLOYED' --format 'value(VERSION.ID)' | grep -v 'maintenance' | sort -r | tail -n +4)
for version in $versions; do
echo "Deleting version: $version for service: $service"
gcloud app versions delete "$version" --service=$service --quiet
done
versions=$(gcloud app versions list --service=$service --sort-by '~LAST_DEPLOYED' --format 'value(VERSION.ID)' | grep -v 'maintenance' | sort -r | tail -n +4)

for version in $versions; do
echo "Attempting to delete version: $version for service: $service"

attempt=1
max_attempts=3

while [ $attempt -le $max_attempts ]; do
# Check for ongoing operations
if gcloud app operations list --format="value(name)" --filter="status=RUNNING" | grep -q .; then
echo "Another operation is still running. Waiting 30 seconds... (Attempt $attempt/$max_attempts)"
sleep 30
((attempt++))
else
if gcloud app versions delete "$version" --service=$service --quiet; then
echo "Successfully deleted version: $version"
break
else
echo "Failed to delete version: $version. Retrying... ($attempt/$max_attempts)"
sleep 10
((attempt++))
fi
fi
done

if [ $attempt -gt $max_attempts ]; then
echo "Skipping version: $version after $max_attempts failed attempts."
fi
done

website2-pr-comment:
name: website2-preview-link-comment
Expand Down
168 changes: 84 additions & 84 deletions .github/workflows/deploy-frontends-to-production.yml
Original file line number Diff line number Diff line change
Expand Up @@ -130,90 +130,90 @@ jobs:
--from-env-file=src/netmanager/.env env-platform-production | kubectl replace -f - -n production

### deploy website ###
website:
name: build-push-deploy-website
needs: [image-tag]
if: inputs.website == true
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Login to GCR
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY_URL }}
username: _json_key
password: ${{ secrets.GCP_FRONTEND_PROJECT_SA_CREDENTIALS }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1

- name: Google login
uses: google-github-actions/auth@v1
with:
credentials_json: "${{ secrets.GCP_FRONTEND_PROJECT_SA_CREDENTIALS }}"

- name: Setup Cloud SDK
uses: "google-github-actions/setup-gcloud@v1"

- name: Create google_application_credentials.json file
id: create-google-application-credentials-file
uses: jsdaniell/[email protected]
with:
name: "google_application_credentials.json"
json: ${{ secrets.GCP_FRONTEND_PROJECT_SA_CREDENTIALS }}
dir: "src/website/"

- name: Create app.yaml and .env.yaml files
run: |
cd src/website/
echo "========== Creating app.yaml file =========="
echo "runtime: python" > app.yaml
echo "env: flex" >> app.yaml
echo "service: default" >> app.yaml
echo "includes:" >> app.yaml
echo " - .env.yaml" >> app.yaml
echo "automatic_scaling:" >> app.yaml
echo " cool_down_period_sec: 120" >> app.yaml
echo " min_num_instances: 1" >> app.yaml
echo " max_num_instances: 10" >> app.yaml
echo " cpu_utilization:" >> app.yaml
echo " target_utilization: 0.8" >> app.yaml
echo "runtime_config:" >> app.yaml
echo " operating_system: \"ubuntu22\"" >> app.yaml
echo " runtime_version: \"3.12\"" >> app.yaml
echo "========== Creating .env.yaml file =========="
echo "env_variables:" > .env.yaml
echo " SECRET: ${{ secrets.WEBSITE_SECRET }}" >> .env.yaml
echo " CLOUDINARY_KEY: ${{ secrets.WEBSITE_CLOUDINARY_KEY }}" >> .env.yaml
echo " CLOUDINARY_NAME: ${{ secrets.WEBSITE_CLOUDINARY_NAME }}" >> .env.yaml
echo " CLOUDINARY_SECRET: ${{ secrets.WEBSITE_CLOUDINARY_SECRET }}" >> .env.yaml
echo " DATABASE_URI: ${{ secrets.WEBSITE_PROD_DATABASE_URI }}" >> .env.yaml
echo " GS_BUCKET_NAME: ${{ secrets.WEBSITE_PROD_GS_BUCKET_NAME }}" >> .env.yaml
echo " REACT_WEB_STATIC_HOST: ${{ secrets.WEBSITE_PROD_REACT_WEB_STATIC_HOST }}" >> .env.yaml
echo " SECRET_KEY: ${{ secrets.WEBSITE_PROD_SECRET_KEY }}" >> .env.yaml
echo " DJANGO_ALLOWED_HOSTS: ${{ secrets.WEBSITE_DJANGO_ALLOWED_HOSTS }}" >> .env.yaml
echo " DEBUG: False" >> .env.yaml
echo " GOOGLE_APPLICATION_CREDENTIALS: /app/google_application_credentials.json" >> .env.yaml

- name: Build and Push Docker Image
run: |
cd src/website/
docker build . \
--build-arg REACT_WEB_STATIC_HOST=${{ secrets.WEBSITE_PROD_REACT_WEB_STATIC_HOST }} \
--build-arg REACT_NETMANAGER_BASE_URL=${{ secrets.WEBSITE_PROD_REACT_NETMANAGER_BASE_URL }} \
--build-arg REACT_APP_NETMANAGER_URL=${{ secrets.PROD_REACT_APP_NETMANAGER_URL }} \
--build-arg REACT_APP_BASE_AIRQLOUDS_URL=${{ secrets.WEBSITE_PROD_REACT_APP_BASE_AIRQLOUDS_URL }} \
--build-arg REACT_APP_BASE_NEWSLETTER_URL=${{ secrets.WEBSITE_REACT_APP_BASE_NEWSLETTER_URL }} \
--build-arg REACT_APP_WEBSITE_BASE_URL=${{ secrets.WEBSITE_PROD_REACT_APP_WEBSITE_BASE_URL }} \
--build-arg REACT_APP_AUTHORIZATION_TOKEN=${{ secrets.WEBSITE_PROD_REACT_APP_AUTHORIZATION_TOKEN }} \
--build-arg REACT_APP_GEO_LOCATION_URL=${{ secrets.WEBSITE_PROD_REACT_APP_GEO_LOCATION_URL }} \
--build-arg REACT_APP_OPENCAGE_API_KEY=${{ secrets.REACT_APP_OPENCAGE_API_KEY }} \
--tag ${{ env.REGISTRY_URL }}/${{ secrets.FRONTEND_PROJECT_ID }}/airqo-website:${{ needs.image-tag.outputs.build_id }}
docker push ${{ env.REGISTRY_URL }}/${{ secrets.FRONTEND_PROJECT_ID }}/airqo-website:${{ needs.image-tag.outputs.build_id }}
docker tag ${{ env.REGISTRY_URL }}/${{ secrets.FRONTEND_PROJECT_ID }}/airqo-website:${{ needs.image-tag.outputs.build_id }} ${{ env.REGISTRY_URL }}/${{ secrets.FRONTEND_PROJECT_ID }}/airqo-website:latest
docker push ${{ env.REGISTRY_URL }}/${{ secrets.FRONTEND_PROJECT_ID }}/airqo-website:latest
# website:
# name: build-push-deploy-website
# needs: [image-tag]
# if: inputs.website == true
# runs-on: ubuntu-latest
# steps:
# - name: Checkout
# uses: actions/checkout@v3

# - name: Login to GCR
# uses: docker/login-action@v2
# with:
# registry: ${{ env.REGISTRY_URL }}
# username: _json_key
# password: ${{ secrets.GCP_FRONTEND_PROJECT_SA_CREDENTIALS }}

# - name: Set up Docker Buildx
# uses: docker/setup-buildx-action@v1

# - name: Google login
# uses: google-github-actions/auth@v1
# with:
# credentials_json: "${{ secrets.GCP_FRONTEND_PROJECT_SA_CREDENTIALS }}"

# - name: Setup Cloud SDK
# uses: "google-github-actions/setup-gcloud@v1"

# - name: Create google_application_credentials.json file
# id: create-google-application-credentials-file
# uses: jsdaniell/[email protected]
# with:
# name: "google_application_credentials.json"
# json: ${{ secrets.GCP_FRONTEND_PROJECT_SA_CREDENTIALS }}
# dir: "src/website/"

# - name: Create app.yaml and .env.yaml files
# run: |
# cd src/website/
# echo "========== Creating app.yaml file =========="
# echo "runtime: python" > app.yaml
# echo "env: flex" >> app.yaml
# echo "service: default" >> app.yaml
# echo "includes:" >> app.yaml
# echo " - .env.yaml" >> app.yaml
# echo "automatic_scaling:" >> app.yaml
# echo " cool_down_period_sec: 120" >> app.yaml
# echo " min_num_instances: 1" >> app.yaml
# echo " max_num_instances: 10" >> app.yaml
# echo " cpu_utilization:" >> app.yaml
# echo " target_utilization: 0.8" >> app.yaml
# echo "runtime_config:" >> app.yaml
# echo " operating_system: \"ubuntu22\"" >> app.yaml
# echo " runtime_version: \"3.12\"" >> app.yaml
# echo "========== Creating .env.yaml file =========="
# echo "env_variables:" > .env.yaml
# echo " SECRET: ${{ secrets.WEBSITE_SECRET }}" >> .env.yaml
# echo " CLOUDINARY_KEY: ${{ secrets.WEBSITE_CLOUDINARY_KEY }}" >> .env.yaml
# echo " CLOUDINARY_NAME: ${{ secrets.WEBSITE_CLOUDINARY_NAME }}" >> .env.yaml
# echo " CLOUDINARY_SECRET: ${{ secrets.WEBSITE_CLOUDINARY_SECRET }}" >> .env.yaml
# echo " DATABASE_URI: ${{ secrets.WEBSITE_PROD_DATABASE_URI }}" >> .env.yaml
# echo " GS_BUCKET_NAME: ${{ secrets.WEBSITE_PROD_GS_BUCKET_NAME }}" >> .env.yaml
# echo " REACT_WEB_STATIC_HOST: ${{ secrets.WEBSITE_PROD_REACT_WEB_STATIC_HOST }}" >> .env.yaml
# echo " SECRET_KEY: ${{ secrets.WEBSITE_PROD_SECRET_KEY }}" >> .env.yaml
# echo " DJANGO_ALLOWED_HOSTS: ${{ secrets.WEBSITE_DJANGO_ALLOWED_HOSTS }}" >> .env.yaml
# echo " DEBUG: False" >> .env.yaml
# echo " GOOGLE_APPLICATION_CREDENTIALS: /app/google_application_credentials.json" >> .env.yaml

# - name: Build and Push Docker Image
# run: |
# cd src/website/
# docker build . \
# --build-arg REACT_WEB_STATIC_HOST=${{ secrets.WEBSITE_PROD_REACT_WEB_STATIC_HOST }} \
# --build-arg REACT_NETMANAGER_BASE_URL=${{ secrets.WEBSITE_PROD_REACT_NETMANAGER_BASE_URL }} \
# --build-arg REACT_APP_NETMANAGER_URL=${{ secrets.PROD_REACT_APP_NETMANAGER_URL }} \
# --build-arg REACT_APP_BASE_AIRQLOUDS_URL=${{ secrets.WEBSITE_PROD_REACT_APP_BASE_AIRQLOUDS_URL }} \
# --build-arg REACT_APP_BASE_NEWSLETTER_URL=${{ secrets.WEBSITE_REACT_APP_BASE_NEWSLETTER_URL }} \
# --build-arg REACT_APP_WEBSITE_BASE_URL=${{ secrets.WEBSITE_PROD_REACT_APP_WEBSITE_BASE_URL }} \
# --build-arg REACT_APP_AUTHORIZATION_TOKEN=${{ secrets.WEBSITE_PROD_REACT_APP_AUTHORIZATION_TOKEN }} \
# --build-arg REACT_APP_GEO_LOCATION_URL=${{ secrets.WEBSITE_PROD_REACT_APP_GEO_LOCATION_URL }} \
# --build-arg REACT_APP_OPENCAGE_API_KEY=${{ secrets.REACT_APP_OPENCAGE_API_KEY }} \
# --tag ${{ env.REGISTRY_URL }}/${{ secrets.FRONTEND_PROJECT_ID }}/airqo-website:${{ needs.image-tag.outputs.build_id }}
# docker push ${{ env.REGISTRY_URL }}/${{ secrets.FRONTEND_PROJECT_ID }}/airqo-website:${{ needs.image-tag.outputs.build_id }}
# docker tag ${{ env.REGISTRY_URL }}/${{ secrets.FRONTEND_PROJECT_ID }}/airqo-website:${{ needs.image-tag.outputs.build_id }} ${{ env.REGISTRY_URL }}/${{ secrets.FRONTEND_PROJECT_ID }}/airqo-website:latest
# docker push ${{ env.REGISTRY_URL }}/${{ secrets.FRONTEND_PROJECT_ID }}/airqo-website:latest

# - name: Deploy to App Engine
# run: |-
Expand Down
Loading
Loading