Skip to content

Commit b101bcb

Browse files
authored
Merge pull request #105 from DataIntegrationGroup/dev
Dev
2 parents 6fd0b0d + 2e1a852 commit b101bcb

5 files changed

Lines changed: 87 additions & 5 deletions

File tree

.github/workflows/dev_deploy.yml

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
name: CD (Development)
2+
3+
on:
4+
push:
5+
branches: [dev]
6+
7+
permissions:
8+
contents: write
9+
10+
jobs:
11+
staging-deploy:
12+
13+
runs-on: ubuntu-latest
14+
environment: staging
15+
16+
steps:
17+
- name: Check out source repository
18+
uses: actions/checkout@v4
19+
with:
20+
fetch-depth: 0
21+
22+
- name: Install uv in container
23+
uses: astral-sh/setup-uv@v6
24+
with:
25+
version: "latest"
26+
27+
- name: Generate requirements.txt
28+
run: |
29+
uv export -o requirements.txt
30+
31+
- name: Authenticate to Google Cloud
32+
uses: 'google-github-actions/auth@v2'
33+
with:
34+
credentials_json: ${{ secrets.CLOUD_DEPLOY_SERVICE_ACCOUNT_KEY }}
35+
36+
# Uses Google Cloud Secret Manager to store secret credentials
37+
- name: Create app.yaml
38+
run: |
39+
echo "service: dev-ocotillo-api" > app.yaml
40+
echo "runtime: python313" >> app.yaml
41+
echo "entrypoint: gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app" >> app.yaml
42+
echo "instance_class: F4" >> app.yaml
43+
echo "" >> app.yaml
44+
echo "env_variables:" >> app.yaml
45+
echo " MODE: \"production\"" >> app.yaml
46+
echo " DB_DRIVER: \"cloudsql\"" >> app.yaml
47+
echo " CLOUD_SQL_INSTANCE_NAME: \"${{ secrets.CLOUD_SQL_INSTANCE_NAME }}\"" >> app.yaml
48+
echo " CLOUD_SQL_DATABASE: \"${{ secrets.CLOUD_SQL_DATABASE }}\"" >> app.yaml
49+
echo " CLOUD_SQL_USER: \"${{ secrets.CLOUD_SQL_USER }}\"" >> app.yaml
50+
echo " CLOUD_SQL_PASSWORD: \"${{ secrets.CLOUD_SQL_PASSWORD }}\"" >> app.yaml
51+
echo " GCS_SERVICE_ACCOUNT_KEY: \"${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}\"" >> app.yaml
52+
echo " GCS_BUCKET_NAME: \"${{secrets.GCS_BUCKET_NAME}}\"" >> app.yaml
53+
echo " AUTHENTIK_URL: \"${{secrets.AUTHENTIK_URL}}\"" >> app.yaml
54+
echo " AUTHENTIK_CLIENT_ID: \"${{secrets.AUTHENTIK_CLIENT_ID}}\"" >> app.yaml
55+
echo " AUTHENTIK_AUTHORIZE_URL: \"${{secrets.AUTHENTIK_AUTHORIZE_URL}}\"" >> app.yaml
56+
echo " AUTHENTIK_TOKEN_URL: \"${{secrets.AUTHENTIK_TOKEN_URL}}\"" >> app.yaml
57+
58+
59+
- name: Deploy to Google Cloud
60+
run: |
61+
gcloud app deploy app.yaml --quiet --project ${{ secrets.GCP_PROJECT_ID }}
62+
63+
# Clean up old versions - delete only the oldest version, one created and one destroyed
64+
- name: Clean up oldest version
65+
run: |
66+
OLDEST_VERSION=$(gcloud app versions list --service=dev-ocotillo-api --project=${{ secrets.GCP_PROJECT_ID}} --format="value(id)" --sort-by="version.createTime" | head -n 1)
67+
if [ ! -z "$OLDEST_VERSION" ]; then
68+
echo "Deleting oldest version: $OLDEST_VERSION"
69+
gcloud app versions delete $OLDEST_VERSION --service=dev-ocotillo-api --project=${{ secrets.GCP_PROJECT_ID }} --quiet
70+
echo "Deleted oldest version: $OLDEST_VERSION"
71+
else
72+
echo "No versions to delete"
73+
fi
74+
75+
- name: Remove app.yaml
76+
run: |
77+
rm app.yaml
78+

.github/workflows/staging_deploy.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
echo " CLOUD_SQL_DATABASE: \"${{ secrets.CLOUD_SQL_DATABASE }}\"" >> app.yaml
4949
echo " CLOUD_SQL_USER: \"${{ secrets.CLOUD_SQL_USER }}\"" >> app.yaml
5050
echo " CLOUD_SQL_PASSWORD: \"${{ secrets.CLOUD_SQL_PASSWORD }}\"" >> app.yaml
51-
echo " GCS_SERVICE_ACCOUNT_KEY: \"${{ secrets.GCS_SERVICE_ACCOUNT_KEY}}\"" >> app.yaml
51+
echo " GCS_SERVICE_ACCOUNT_KEY: \"${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}\"" >> app.yaml
5252
echo " GCS_BUCKET_NAME: \"${{secrets.GCS_BUCKET_NAME}}\"" >> app.yaml
5353
echo " AUTHENTIK_URL: \"${{secrets.AUTHENTIK_URL}}\"" >> app.yaml
5454
echo " AUTHENTIK_CLIENT_ID: \"${{secrets.AUTHENTIK_CLIENT_ID}}\"" >> app.yaml
@@ -63,7 +63,7 @@ jobs:
6363
# Clean up old versions - delete only the oldest version, one created and one destroyed
6464
- name: Clean up oldest version
6565
run: |
66-
OLDEST_VERSION=$(gcloud app versions list --service=ocotillo-api --project=${{ secrets.GCP_PROJECT_ID }} --format="value(id)" --sort-by="version.createTime" | head -n 1)
66+
OLDEST_VERSION=$(gcloud app versions list --service=ocotillo-api --project=${{ secrets.GCP_PROJECT_ID}} --format="value(id)" --sort-by="version.createTime" | head -n 1)
6767
if [ ! -z "$OLDEST_VERSION" ]; then
6868
echo "Deleting oldest version: $OLDEST_VERSION"
6969
gcloud app versions delete $OLDEST_VERSION --service=ocotillo-api --project=${{ secrets.GCP_PROJECT_ID }} --quiet

db/thing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ class WellScreen(Base, AutoBaseMixin):
113113
String(1000), nullable=True, info={"unit": "description of the screen"}
114114
)
115115
# Define a relationship to well if needed
116-
# well = relationship("Well")
116+
thing = relationship("Thing")
117117

118118

119119
# ============= EOF =============================================

schemas/thing.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ class WellScreenResponse(ORMBaseModel):
161161
"""
162162

163163
thing_id: int
164+
thing: WellResponse
164165
screen_depth_bottom: float
165166
screen_depth_top: float
166167
screen_type: str | None = None

services/gcs_helper.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515
# ===============================================================================
16+
import base64
1617
import json
1718
import os
1819
import datetime
@@ -32,10 +33,12 @@
3233
def get_storage_bucket() -> storage.Bucket:
3334

3435
if settings.mode == "production":
35-
key_json = os.environ.get("GCS_SERVICE_ACCOUNT_KEY")
36+
key_base64 = os.environ.get("GCS_SERVICE_ACCOUNT_KEY")
37+
decoded = base64.b64decode(key_base64).decode("utf-8")
38+
3639
# Load service account credentials
3740
creds = service_account.Credentials.from_service_account_info(
38-
json.loads(key_json)
41+
json.loads(decoded)
3942
)
4043

4144
# Create storage client

0 commit comments

Comments
 (0)