From 19568e7bded355c8cd0b7f89adaa743f0ce35438 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 9 Mar 2025 23:47:31 +0000 Subject: [PATCH 01/12] [workflows]: Add ci.yml --- .github/workflows/ci.yml | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ec7148e --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,43 @@ +name: Continuous Integration + +on: + pull_request: + branches: + - main + +jobs: + test: + runs-on: ubuntu-latest + + strategy: + matrix: + python-version: [3.13] + + steps: + # Checkout the code + - name: Checkout code + uses: actions/checkout@v3 + + # Set up Python + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + # Install dependencies + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r server/src/requirements.txt + + # Run tests with coverage + - name: Run tests with coverage + run: PYTHONPATH=$(pwd)/src pytest --cov=src/functions --cov-report=html + # + # Upload coverage report as an artifact + - name: Upload coverage report (HTML) + if: always() + uses: actions/upload-artifact@v3 + with: + name: coverage-report-html + path: htmlcov/ From e0e91e7878d84a53c073d3d6343fde4f221b556b Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 9 Mar 2025 23:49:21 +0000 Subject: [PATCH 02/12] [workflows]: Upgrade to upload-artifact@v4 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ec7148e..a30e242 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,7 @@ jobs: # Upload coverage report as an artifact - name: Upload coverage report (HTML) if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: coverage-report-html path: htmlcov/ From 9df96440fc73052e8ad8f0582f1dde1a834e142c Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 9 Mar 2025 23:51:26 +0000 Subject: [PATCH 03/12] [server]: Add pytest modules to requirements.txt --- server/src/requirements.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/server/src/requirements.txt b/server/src/requirements.txt index db435d0..d69abb0 100644 --- a/server/src/requirements.txt +++ b/server/src/requirements.txt @@ -1,3 +1,5 @@ -boto3==1.36.23 -Requests==2.32.3 -xmltodict==0.14.2 +boto3 +Requests +xmltodict +pytest +pytest-cov From 925cfdfd37ea1e6848566c64606b9a46619251ca Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 9 Mar 2025 23:53:45 +0000 Subject: [PATCH 04/12] [workflows]: Specify PYTHONPATH explicitly --- .github/workflows/ci.yml | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a30e242..a9ece5f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,6 +4,9 @@ on: pull_request: branches: - main + push: + branches: + - main jobs: test: @@ -28,16 +31,30 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install -r server/src/requirements.txt + pip install -r requirements.txt - # Run tests with coverage + # Run tests and generate coverage report - name: Run tests with coverage - run: PYTHONPATH=$(pwd)/src pytest --cov=src/functions --cov-report=html - # + run: | + export PYTHONPATH=$(pwd)/server/src # Fix: Set PYTHONPATH + pytest --cov=src/functions --cov-report=term-missing --cov-report=xml --cov-report=html + # Upload coverage report as an artifact - name: Upload coverage report (HTML) if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: name: coverage-report-html path: htmlcov/ + + # Upload XML coverage report for CI tools + - name: Upload coverage report (XML) + if: always() + uses: actions/upload-artifact@v3 + with: + name: coverage-report-xml + path: coverage.xml + + # Show coverage summary in logs + - name: Show coverage summary + run: cat coverage.xml From 76b68e96c7068df2caf3d7825fb7def31ae99f8a Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 9 Mar 2025 23:54:32 +0000 Subject: [PATCH 05/12] [workflows]: Upgrade to upload-artifact@v4 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a9ece5f..bc01c53 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,7 @@ jobs: # Upload XML coverage report for CI tools - name: Upload coverage report (XML) if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: coverage-report-xml path: coverage.xml From fe9155b38f2895b91ad2214df1282096d31424c9 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 9 Mar 2025 23:55:15 +0000 Subject: [PATCH 06/12] [workflows]: Upgrade to upload-artifact@v4 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bc01c53..cc69837 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,7 +42,7 @@ jobs: # Upload coverage report as an artifact - name: Upload coverage report (HTML) if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: coverage-report-html path: htmlcov/ From 5a3e2fd430bf4fed077cd256e90029aeb34cf5b4 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 9 Mar 2025 23:56:19 +0000 Subject: [PATCH 07/12] [workflows]: Fix requirements.txt path --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cc69837..df6abe3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,7 +31,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install -r requirements.txt + pip install -r server/src/requirements.txt # Run tests and generate coverage report - name: Run tests with coverage From f8c4c22a22b6677e26b525012717f18e7d991c13 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 9 Mar 2025 23:58:50 +0000 Subject: [PATCH 08/12] [workflows]: Add AWS envvars --- .github/workflows/ci.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index df6abe3..4dfeecb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,12 +31,21 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install -r server/src/requirements.txt + pip install -r requirements.txt + + # Set AWS region and mock credentials + - name: Configure AWS Credentials for Tests + run: | + echo "Setting AWS region and mock credentials..." + export AWS_REGION=us-east-1 + export AWS_ACCESS_KEY_ID=fake_access_key + export AWS_SECRET_ACCESS_KEY=fake_secret_key + export AWS_DEFAULT_REGION=us-east-1 # Run tests and generate coverage report - name: Run tests with coverage run: | - export PYTHONPATH=$(pwd)/server/src # Fix: Set PYTHONPATH + export PYTHONPATH=$(pwd)/server/src pytest --cov=src/functions --cov-report=term-missing --cov-report=xml --cov-report=html # Upload coverage report as an artifact From c6b04b65256c8c01b6a951110a5a76164c76f8ca Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 10 Mar 2025 00:01:38 +0000 Subject: [PATCH 09/12] [workflows]: Fix requirements.txt path --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4dfeecb..d540c09 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,7 +31,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install -r requirements.txt + pip install -r server/src/requirements.txt # Set AWS region and mock credentials - name: Configure AWS Credentials for Tests From e15a3acd67eeb545d1785562494e4bfbcac4efa0 Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 10 Mar 2025 00:07:15 +0000 Subject: [PATCH 10/12] [server]: Add default AWS_DEFAULT_REGION value if not set --- server/src/functions/permanent_data/permanent_data.py | 3 ++- server/src/functions/return_all_data/lambda_function.py | 1 + server/src/functions/return_newest_data/lambda_function.py | 1 + server/src/functions/transient_data/transient_data.py | 3 ++- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/server/src/functions/permanent_data/permanent_data.py b/server/src/functions/permanent_data/permanent_data.py index b204f77..b0f2190 100644 --- a/server/src/functions/permanent_data/permanent_data.py +++ b/server/src/functions/permanent_data/permanent_data.py @@ -12,6 +12,7 @@ from concurrent.futures import ThreadPoolExecutor session = requests.Session() # Setup DynamoDB client for Lambda +os.environ.setdefault('AWS_DEFAULT_REGION', 'us-east-1') dynamodb = boto3.resource("dynamodb") table_name = os.environ.get("DYNAMODB_TABLE", "permanent_data") table = dynamodb.Table(table_name) @@ -208,4 +209,4 @@ if __name__ == "__main__": for future in futures: data.extend(future.result()) - print(json.dumps(data)) \ No newline at end of file + print(json.dumps(data)) diff --git a/server/src/functions/return_all_data/lambda_function.py b/server/src/functions/return_all_data/lambda_function.py index 614babb..198198b 100644 --- a/server/src/functions/return_all_data/lambda_function.py +++ b/server/src/functions/return_all_data/lambda_function.py @@ -3,6 +3,7 @@ import os import boto3 from boto3.dynamodb.conditions import Key, Attr +os.environ.setdefault('AWS_DEFAULT_REGION', 'us-east-1') dynamodb = boto3.resource('dynamodb') def lambda_handler(event, context): diff --git a/server/src/functions/return_newest_data/lambda_function.py b/server/src/functions/return_newest_data/lambda_function.py index 2cc0e88..82d1c7f 100644 --- a/server/src/functions/return_newest_data/lambda_function.py +++ b/server/src/functions/return_newest_data/lambda_function.py @@ -3,6 +3,7 @@ import json import os from boto3.dynamodb.conditions import Key, Attr +os.environ.setdefault('AWS_DEFAULT_REGION', 'us-east-1') dynamodb = boto3.resource('dynamodb') gsi_name = "objectType-index" diff --git a/server/src/functions/transient_data/transient_data.py b/server/src/functions/transient_data/transient_data.py index 932a853..ef7c4ec 100644 --- a/server/src/functions/transient_data/transient_data.py +++ b/server/src/functions/transient_data/transient_data.py @@ -11,6 +11,7 @@ from concurrent.futures import ThreadPoolExecutor session = requests.Session() # Setup DynamoDB client +os.environ.setdefault('AWS_DEFAULT_REGION', 'us-east-1') dynamodb = boto3.resource("dynamodb") table_name = os.environ.get("DYNAMODB_TABLE", "transient_data") table = dynamodb.Table(table_name) @@ -224,4 +225,4 @@ if __name__ == "__main__": for future in futures: data.extend(future.result()) - print(json.dumps(data)) \ No newline at end of file + print(json.dumps(data)) From 3c8cf170f3db9c7fc37659c64a812472579cb3f1 Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 10 Mar 2025 00:12:17 +0000 Subject: [PATCH 11/12] [server]: Add conftest.py --- server/src/test/conftest.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 server/src/test/conftest.py diff --git a/server/src/test/conftest.py b/server/src/test/conftest.py new file mode 100644 index 0000000..de520f6 --- /dev/null +++ b/server/src/test/conftest.py @@ -0,0 +1,5 @@ +import sys +import os + +# Ensure the /server path is in PYTHONPATH +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../../'))) From 16608320a9aa858ed907cf6343431aa166674097 Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 10 Mar 2025 00:14:53 +0000 Subject: [PATCH 12/12] [workflows]: Tweak cov path --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d540c09..141c75a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,7 +46,7 @@ jobs: - name: Run tests with coverage run: | export PYTHONPATH=$(pwd)/server/src - pytest --cov=src/functions --cov-report=term-missing --cov-report=xml --cov-report=html + pytest --cov=src/functions --cov=server/src --cov-report=term-missing --cov-report=xml --cov-report=html # Upload coverage report as an artifact - name: Upload coverage report (HTML)