From 5a74d2d8875afb3f0c675025ce3889d6dc7fcd60 Mon Sep 17 00:00:00 2001 From: pwei1018 Date: Tue, 16 Jul 2024 14:00:55 -0700 Subject: [PATCH] Setup Developer Connect repo. --- ...i-cd.yaml => devloper-connect-api-cd.yaml} | 8 +- ...i-ci.yaml => devloper-connect-api-ci.yaml} | 8 +- ...ui-cd.yaml => devloper-connect-ui-cd.yaml} | 6 +- ...ui-ci.yaml => devloper-connect-ui-ci.yaml} | 8 +- README.md | 4 +- api/devops/gcp/clouddeploy.yaml | 76 +++++++++++++++++++ api/pyproject.toml | 4 +- .../__init__.py | 0 .../common/auth.py | 0 .../common/enum.py | 0 .../common/error.py | 0 .../common/flags.py | 6 +- .../common/run_version.py | 0 .../config.py | 0 .../resources/__init__.py | 0 .../resources/base.py | 0 .../resources/org_api_keys.py | 4 +- .../services/__init__.py | 0 .../services/api_gateway.py | 0 api/tests/conftest.py | 12 +-- api/wsgi.py | 2 +- codecov.yaml | 12 +-- web/site/README.md | 16 +--- web/site/firebase.json | 2 +- web/site/package.json | 2 +- 25 files changed, 119 insertions(+), 51 deletions(-) rename .github/workflows/{apigw-api-cd.yaml => devloper-connect-api-cd.yaml} (75%) rename .github/workflows/{apigw-api-ci.yaml => devloper-connect-api-ci.yaml} (65%) rename .github/workflows/{apigw-ui-cd.yaml => devloper-connect-ui-cd.yaml} (86%) rename .github/workflows/{apigw-ui-ci.yaml => devloper-connect-ui-ci.yaml} (66%) create mode 100644 api/devops/gcp/clouddeploy.yaml rename api/src/{sbc_apigw => devloper-connect-api}/__init__.py (100%) rename api/src/{sbc_apigw => devloper-connect-api}/common/auth.py (100%) rename api/src/{sbc_apigw => devloper-connect-api}/common/enum.py (100%) rename api/src/{sbc_apigw => devloper-connect-api}/common/error.py (100%) rename api/src/{sbc_apigw => devloper-connect-api}/common/flags.py (96%) rename api/src/{sbc_apigw => devloper-connect-api}/common/run_version.py (100%) rename api/src/{sbc_apigw => devloper-connect-api}/config.py (100%) rename api/src/{sbc_apigw => devloper-connect-api}/resources/__init__.py (100%) rename api/src/{sbc_apigw => devloper-connect-api}/resources/base.py (100%) rename api/src/{sbc_apigw => devloper-connect-api}/resources/org_api_keys.py (94%) rename api/src/{sbc_apigw => devloper-connect-api}/services/__init__.py (100%) rename api/src/{sbc_apigw => devloper-connect-api}/services/api_gateway.py (100%) diff --git a/.github/workflows/apigw-api-cd.yaml b/.github/workflows/devloper-connect-api-cd.yaml similarity index 75% rename from .github/workflows/apigw-api-cd.yaml rename to .github/workflows/devloper-connect-api-cd.yaml index b19a42a0..558c71f8 100644 --- a/.github/workflows/apigw-api-cd.yaml +++ b/.github/workflows/devloper-connect-api-cd.yaml @@ -1,4 +1,4 @@ -name: APIGW API CD +name: Developer Connect API CD on: push: @@ -19,11 +19,11 @@ on: - prod jobs: - apigw-api-cd: - uses: bcgov/bcregistry-sre/.github/workflows/cloud-run-service-cd.yaml@main + devloper-connect-api-cd: + uses: bcgov/bcregistry-sre/.github/workflows/backend-cd.yaml@main with: target: ${{ inputs.target }} - app_name: "apigw-api" + app_name: "devloper-connect-api" working_directory: "./api" secrets: WORKLOAD_IDENTIFY_POOLS_PROVIDER: ${{ secrets.WORKLOAD_IDENTIFY_POOLS_PROVIDER }} diff --git a/.github/workflows/apigw-api-ci.yaml b/.github/workflows/devloper-connect-api-ci.yaml similarity index 65% rename from .github/workflows/apigw-api-ci.yaml rename to .github/workflows/devloper-connect-api-ci.yaml index d7c30d25..39ff909b 100644 --- a/.github/workflows/apigw-api-ci.yaml +++ b/.github/workflows/devloper-connect-api-ci.yaml @@ -1,4 +1,4 @@ -name: APIGW API CI +name: Developer Connect API CI on: pull_request: @@ -12,9 +12,9 @@ defaults: working-directory: ./api jobs: - apigw-api-ci: + devloper-connect-api-ci: uses: bcgov/bcregistry-sre/.github/workflows/backend-ci.yaml@main with: - app_name: apigw-api" + app_name: devloper-connect-api" working_directory: "./api" - codecov_flag: "apigwapi" \ No newline at end of file + codecov_flag: "devloperconnectapi" \ No newline at end of file diff --git a/.github/workflows/apigw-ui-cd.yaml b/.github/workflows/devloper-connect-ui-cd.yaml similarity index 86% rename from .github/workflows/apigw-ui-cd.yaml rename to .github/workflows/devloper-connect-ui-cd.yaml index 02fdff91..f99b5c62 100644 --- a/.github/workflows/apigw-ui-cd.yaml +++ b/.github/workflows/devloper-connect-ui-cd.yaml @@ -1,4 +1,4 @@ -name: APIGW UI CD +name: Developer Connect UI CD on: push: @@ -19,11 +19,11 @@ on: - prod jobs: - apigw-ui-cd: + devloper-connect-ui-cd: uses: bcgov/bcregistry-sre/.github/workflows/frontend-cd.yaml@main with: target: ${{ inputs.target }} - app_name: "apigw-ui" + app_name: "devloper-connect-ui" working_directory: "./web/site" secrets: WORKLOAD_IDENTIFY_POOLS_PROVIDER: ${{ secrets.WORKLOAD_IDENTIFY_POOLS_PROVIDER }} diff --git a/.github/workflows/apigw-ui-ci.yaml b/.github/workflows/devloper-connect-ui-ci.yaml similarity index 66% rename from .github/workflows/apigw-ui-ci.yaml rename to .github/workflows/devloper-connect-ui-ci.yaml index c31e7b53..38052d5a 100644 --- a/.github/workflows/apigw-ui-ci.yaml +++ b/.github/workflows/devloper-connect-ui-ci.yaml @@ -1,4 +1,4 @@ -name: APIGW UI CI +name: Developer Connect UI CI on: pull_request: @@ -12,9 +12,9 @@ defaults: working-directory: ./web/site jobs: - apigw-ui-ci: + devloper-connect-ui-ci: uses: bcgov/bcregistry-sre/.github/workflows/frontend-ci.yaml@main with: - app_name: "apigw-ui" + app_name: "devloper-connect-ui" working_directory: "./web/site" - codecov_flag: "apigwui" + codecov_flag: "devloperconnectui" diff --git a/README.md b/README.md index 0cca4f46..ef83b93d 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# sbc-apigw +# Developer Connect ## Development & Contributing Create a fork and local copy of this repo. Answer _Y_ to create a local clone. ```bash -gh repo fork bcgov/sbc-apigw +gh repo fork bcgov/developer.connect ``` diff --git a/api/devops/gcp/clouddeploy.yaml b/api/devops/gcp/clouddeploy.yaml new file mode 100644 index 00000000..d663df49 --- /dev/null +++ b/api/devops/gcp/clouddeploy.yaml @@ -0,0 +1,76 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: deploy.cloud.google.com/v1 +kind: DeliveryPipeline +metadata: + name: devloper-connect-api-pipeline +description: Deployment pipeline +serialPipeline: + stages: + - targetId: gtksf3-dev + profiles: [dev] + strategy: + standard: + verify: false + deployParameters: + - values: + deploy-env: "development" + deploy-project-id: "gtksf3-dev" + service-name: "devloper-connect-api-dev" + container-name: "devloper-connect-api-dev" + cloudsql-instances: "" + service-account: "sa-api@gtksf3-dev.iam.gserviceaccount.com" + - targetId: gtksf3-test + profiles: [test] + strategy: + standard: + verify: false + deployParameters: + - values: + deploy-env: "test" + deploy-project-id: "gtksf3-test" + service-name: "devloper-connect-api-test" + container-name: "devloper-connect-api-test" + app-env: "test" + cloudsql-instances: "" + service-account: "sa-api@gtksf3-test.iam.gserviceaccount.com" + - targetId: gtksf3-sandbox + profiles: [sandbox] + strategy: + standard: + verify: false + deployParameters: + - values: + deploy-env: "sandbox" + deploy-project-id: "gtksf3-tools" + service-name: "devloper-connect-api-sandbox" + container-name: "devloper-connect-api-sandbox" + cloudsql-instances: "" + service-account: "sa-api@gtksf3-tools.iam.gserviceaccount.com" + - targetId: gtksf3-prod + profiles: [prod] + strategy: + standard: + verify: false + deployParameters: + - values: + deploy-env: "production" + deploy-project-id: "gtksf3-prod" + service-name: "devloper-connect-api-prod" + container-name: "devloper-connect-api-prod" + cloudsql-instances: "" + service-account: "sa-api@gtksf3-prod.iam.gserviceaccount.com" + max-scale: "10" + container-concurrency: "20" diff --git a/api/pyproject.toml b/api/pyproject.toml index e7ca1ecb..6905d863 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -1,11 +1,11 @@ [tool.poetry] -name = "sbc-apigw" +name = "devloper-connect-api" version = "1.0.0" description = "" authors = ["thorwolpert "] license = "BSD 3-Clause" readme = "README.md" -packages = [{include = "sbc_apigw", from = "src"}] +packages = [{include = "devloper-connect-api", from = "src"}] [tool.poetry.dependencies] python = "^3.12.4" diff --git a/api/src/sbc_apigw/__init__.py b/api/src/devloper-connect-api/__init__.py similarity index 100% rename from api/src/sbc_apigw/__init__.py rename to api/src/devloper-connect-api/__init__.py diff --git a/api/src/sbc_apigw/common/auth.py b/api/src/devloper-connect-api/common/auth.py similarity index 100% rename from api/src/sbc_apigw/common/auth.py rename to api/src/devloper-connect-api/common/auth.py diff --git a/api/src/sbc_apigw/common/enum.py b/api/src/devloper-connect-api/common/enum.py similarity index 100% rename from api/src/sbc_apigw/common/enum.py rename to api/src/devloper-connect-api/common/enum.py diff --git a/api/src/sbc_apigw/common/error.py b/api/src/devloper-connect-api/common/error.py similarity index 100% rename from api/src/sbc_apigw/common/error.py rename to api/src/devloper-connect-api/common/error.py diff --git a/api/src/sbc_apigw/common/flags.py b/api/src/devloper-connect-api/common/flags.py similarity index 96% rename from api/src/sbc_apigw/common/flags.py rename to api/src/devloper-connect-api/common/flags.py index 5f41b7b1..1c0f208c 100644 --- a/api/src/sbc_apigw/common/flags.py +++ b/api/src/devloper-connect-api/common/flags.py @@ -44,7 +44,7 @@ from flask import has_app_context from flask import Flask -import sbc_apigw +import devloper-connect-api class Flags: @@ -115,9 +115,9 @@ def get_anonymous_user(): return {"key": "anonymous"} @staticmethod - def flag_user(user: sbc_apigw.models.User, account_id: int = None): + def flag_user(user: devloper-connect-api.models.User, account_id: int = None): """Convert User into a Flag user dict.""" - if not isinstance(user, sbc_apigw.models.User): + if not isinstance(user, devloper-connect-api.models.User): return None _user = { diff --git a/api/src/sbc_apigw/common/run_version.py b/api/src/devloper-connect-api/common/run_version.py similarity index 100% rename from api/src/sbc_apigw/common/run_version.py rename to api/src/devloper-connect-api/common/run_version.py diff --git a/api/src/sbc_apigw/config.py b/api/src/devloper-connect-api/config.py similarity index 100% rename from api/src/sbc_apigw/config.py rename to api/src/devloper-connect-api/config.py diff --git a/api/src/sbc_apigw/resources/__init__.py b/api/src/devloper-connect-api/resources/__init__.py similarity index 100% rename from api/src/sbc_apigw/resources/__init__.py rename to api/src/devloper-connect-api/resources/__init__.py diff --git a/api/src/sbc_apigw/resources/base.py b/api/src/devloper-connect-api/resources/base.py similarity index 100% rename from api/src/sbc_apigw/resources/base.py rename to api/src/devloper-connect-api/resources/base.py diff --git a/api/src/sbc_apigw/resources/org_api_keys.py b/api/src/devloper-connect-api/resources/org_api_keys.py similarity index 94% rename from api/src/sbc_apigw/resources/org_api_keys.py rename to api/src/devloper-connect-api/resources/org_api_keys.py index 64d6c647..28b9175f 100644 --- a/api/src/sbc_apigw/resources/org_api_keys.py +++ b/api/src/devloper-connect-api/resources/org_api_keys.py @@ -17,10 +17,10 @@ from flask_cors import cross_origin from http import HTTPStatus -from sbc_apigw.common.auth import jwt as _jwt +from devloper-connect-api.common.auth import jwt as _jwt from auth_api.exceptions import BusinessException from auth_api.schemas import utils as schema_utils -from sbc_apigw.services.api_gateway import ApiGateway as ApiGatewayService +from devloper-connect-api.services.api_gateway import ApiGateway as ApiGatewayService from auth_api.utils.roles import Role bp = Blueprint("KEYS", __name__, url_prefix=f"/v1/orgs//api-keys") diff --git a/api/src/sbc_apigw/services/__init__.py b/api/src/devloper-connect-api/services/__init__.py similarity index 100% rename from api/src/sbc_apigw/services/__init__.py rename to api/src/devloper-connect-api/services/__init__.py diff --git a/api/src/sbc_apigw/services/api_gateway.py b/api/src/devloper-connect-api/services/api_gateway.py similarity index 100% rename from api/src/sbc_apigw/services/api_gateway.py rename to api/src/devloper-connect-api/services/api_gateway.py diff --git a/api/tests/conftest.py b/api/tests/conftest.py index e269f44f..6eda57b2 100644 --- a/api/tests/conftest.py +++ b/api/tests/conftest.py @@ -25,10 +25,10 @@ from ldclient.integrations.test_data import TestData from sqlalchemy import event, text -from sbc_apigw import create_app -from sbc_apigw import jwt as _jwt -from sbc_apigw.models import db as _db -from sbc_apigw.config import Testing +from devloper-connect-api import create_app +from devloper-connect-api import jwt as _jwt +from devloper-connect-api.models import db as _db +from devloper-connect-api.config import Testing def create_test_db(user: str = None, password: str = None, @@ -82,9 +82,9 @@ def drop_test_db(user: str = None, DATABASE_URI = database_uri else: DATABASE_URI = f"postgresql://{user}:{password}@{host}:{port}/{user}" - + DATABASE_URI = DATABASE_URI[:DATABASE_URI.rfind("/")] + '/postgres' - + close_all = f""" SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity diff --git a/api/wsgi.py b/api/wsgi.py index b00a945b..17a927b8 100755 --- a/api/wsgi.py +++ b/api/wsgi.py @@ -15,7 +15,7 @@ """ import os -from sbc_apigw import create_app +from devloper-connect-api import create_app app = create_app() # pylint: disable=invalid-name diff --git a/codecov.yaml b/codecov.yaml index 07e0cd62..bd6eba9b 100644 --- a/codecov.yaml +++ b/codecov.yaml @@ -11,14 +11,14 @@ coverage: patch: false project: default: false - apigwapi: + devloperconnectapi: target: 80% flags: - - apigwapi - apigwui: + - devloperconnectapi + devloperconnectui: target: 80% flags: - - apigwui + - devloperconnectui ignore: - "^/tests/**/*" # ignore test harness code @@ -36,11 +36,11 @@ comment: require_changes: true flags: - apigwrapi: + devloperconnectrapi: paths: - api carryforward: true - apigwui: + devloperconnectui: paths: - web/site carryforward: true diff --git a/web/site/README.md b/web/site/README.md index 26c6c79c..4aab7fad 100644 --- a/web/site/README.md +++ b/web/site/README.md @@ -1,24 +1,15 @@ -[![License](https://img.shields.io/badge/License-BSD%203%20Clause-blue.svg)](LICENSE) - -# Service BC API Gateway - -## Technology Stack Used - -- [Nuxt3](https://nuxt.com/) + Typescript -- [Nuxt UI](https://ui.nuxt.com/) -- [Nuxt Content](https://content.nuxt.com/) -- [Playwright](https://playwright.dev/) Testing +# Developer Connect ## Development Create a fork and local copy of this repo. Answer _Y_ to create a local clone. ```bash -gh repo fork bcgov/sbc-apigw +gh repo fork bcgov/developer.connect ``` Change into the directory and install the packages. ```bash -cd sbc-apigw +cd developer.connect/web/site pnpm install ``` @@ -47,6 +38,7 @@ pnpm test:unit Run Playwright e2e tests in headless mode ```bash +cd developer.connect/web/site pnpm test:e2e ``` diff --git a/web/site/firebase.json b/web/site/firebase.json index 32adee38..0e97f4b0 100644 --- a/web/site/firebase.json +++ b/web/site/firebase.json @@ -1,7 +1,7 @@ { "hosting": { - "site": "apigw-dev", + "site": "devloper-connect-dev", "public": "dist", "ignore": ["**/devops/**", "**/.*", "**/node_modules/**"], "rewrites": [ diff --git a/web/site/package.json b/web/site/package.json index 0f897f7f..3388f4e7 100644 --- a/web/site/package.json +++ b/web/site/package.json @@ -1,5 +1,5 @@ { - "name": "sbc-apigw-site", + "name": "devloper-connect-site", "private": true, "type": "module", "version": "1.0.3",