Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
111cd74
feat(api): initialize STAC Atlas API with collections, conformance, a…
RobinGummels Nov 11, 2025
73ce26a
adds extensions to the database
SonkeHoffmann Nov 19, 2025
72feedd
adds tables for catalos to the database
SonkeHoffmann Nov 19, 2025
48fc81f
adds tables for collections to the database
SonkeHoffmann Nov 19, 2025
957c7cd
adds tables for relations to the database structure
SonkeHoffmann Nov 19, 2025
ffaf153
added indexes to the database.
SonkeHoffmann Nov 19, 2025
85e429e
Database component is into a docker container. It works!!! Woooohu
Nov 19, 2025
15ea727
Got the final version of the bid
RobinGummels Nov 19, 2025
840619b
fix(api): enhance STAC API landing page and conformance links
RobinGummels Nov 23, 2025
909991d
Merge pull request #112 from SpatioCore/dev-api-robin - Overhaul of t…
RobinGummels Nov 24, 2025
a5ac3b6
updatet the `README.md` for the database component. Added an overall …
Nov 25, 2025
d22a220
added a descripton for the tabels and indexes as requestet by @Mammut…
Nov 25, 2025
a1aed4c
feat(api): implement shared conformance URIs and add tests for confor…
VincentKuehn Nov 26, 2025
f5b78a1
Merge pull request #157 from SpatioCore/dev-api-vincent
RobinGummels Nov 26, 2025
a497644
Update db/README.md
SonkeHoffmann Nov 26, 2025
e77a9ce
Update db/README.md
SonkeHoffmann Nov 26, 2025
eb274d4
Implemented 2.3 and 2.4 (#111)
georgevoulg Nov 26, 2025
4baa62c
Merge pull request #73 from SpatioCore/dev-database
Mammutor Nov 26, 2025
1109674
feat(api): add collection search parameters and validation middleware…
RobinGummels Nov 28, 2025
d375216
API: 3 Database Integration first version (#161)
SonkeHoffmann Nov 30, 2025
b3e38ad
Added environment variables and a `.env` for `docker-compose.yml` (#164)
SonkeHoffmann Dec 2, 2025
3205f91
Added a CI/CD Pipeline to prevent pull-requests without functioning t…
RobinGummels Dec 3, 2025
37fc8ad
Merge branch 'dev-api' of github.com:SpatioCore/STAC-Atlas into dev-api
RobinGummels Dec 3, 2025
1ed8ff6
fixed errors suggested by the linter.
RobinGummels Dec 3, 2025
fe993bc
Implemented Collection Search extension including a DB-Connection (#165)
VincentKuehn Dec 7, 2025
b0b749d
Merge branch 'dev' into dev-api
RobinGummels Dec 7, 2025
5a7af5b
Updated Query-Builder to get all necessary fields from all db_tables …
RobinGummels Dec 9, 2025
d83eeb4
Update api/.env.example
RobinGummels Dec 9, 2025
98498d8
Merge pull request #184 from SpatioCore/dev-api
SonkeHoffmann Dec 10, 2025
70dc043
Updated Query-Builder to get all necessary fields from all db_tables …
RobinGummels Dec 9, 2025
6e5ab3e
Merge branch 'dev-api-robin' of github.com:SpatioCore/STAC-Atlas into…
RobinGummels Dec 10, 2025
b811288
Added `openapi.yaml` (now http://localhost:3000/api-docs/ is working).
RobinGummels Dec 10, 2025
b047389
Added discription on how to use `stac-api-validator`. Currently we ar…
RobinGummels Dec 10, 2025
34bf962
Changed API-Version name to 1.1.0 instead of 1.0.0
RobinGummels Dec 14, 2025
138ac3d
latest database Version (#187) with `stac_id` and changed definition…
SonkeHoffmann Dec 14, 2025
a70169d
Merge pull request #185 from SpatioCore/dev-api-robin
SonkeHoffmann Dec 14, 2025
3e23f15
Revert "API is now responding with all necessary fields for each coll…
RobinGummels Dec 14, 2025
f8a5057
Revert "Revert "API is now responding with all necessary fields for e…
RobinGummels Dec 14, 2025
b73dc34
Implement more Queryable-Fields and add the keywords-field to q fullt…
BrokeJ Dec 22, 2025
1d4a434
Implement GET /collections/{id} endpoint with validation and QueryBui…
VincentKuehn Dec 26, 2025
a86d52a
Merge branch 'dev' into dev-api
RobinGummels Dec 26, 2025
63e25fb
Added `GET /collections/{id}`-Endpoint, more Fields in the responses …
RobinGummels Dec 31, 2025
fff0767
Dev database: trigger function for better keyword handling (#209)
SonkeHoffmann Jan 7, 2026
557cad4
feat(api): Implement complete CQL2 filtering for Collection Search (#…
RobinGummels Jan 7, 2026
e778bd2
Dev database: added different users (for api and crawler) (#214)
SonkeHoffmann Jan 11, 2026
3e1dbc8
Dev database: source_url and filter trigger (#220)
SonkeHoffmann Jan 11, 2026
b07ee04
Implemented structured Error-Handling, Error-Messaging and Error-Logg…
RobinGummels Jan 15, 2026
7cc1efd
Added Docker-Setup for API-Component (#246)
SonkeHoffmann Jan 19, 2026
d2157fc
Implement rate limiting middleware and update README with rate limit …
BrokeJ Jan 20, 2026
cad5183
STAC API Validator Compliance, Tests Alignment, and CI Integration (#…
VincentKuehn Jan 20, 2026
96d5356
Merge branch 'dev' into dev-api
RobinGummels Jan 20, 2026
8a51252
Merge pull request #256 from SpatioCore/dev-api
RobinGummels Jan 21, 2026
8f6d1ba
Dev docker: container to start every component container at once (#259)
SonkeHoffmann Jan 21, 2026
935a6a5
Added favicon for nicer UI (#249)
RobinGummels Jan 21, 2026
d0b9550
Database now with unique stac_id and stac_url is now in collection (#…
Mammutor Jan 28, 2026
dc53a6d
Align API with new database schema and STAC-compliant extent terminol…
VincentKuehn Jan 30, 2026
e4fe74d
Added enhanced CORS-Settings and Logging-Logic (#255)
RobinGummels Jan 30, 2026
d026ca8
Merge branch 'dev' into dev-api
RobinGummels Jan 30, 2026
4c1b526
Changed API-Version from 1.1.0 to 1.0.0
RobinGummels Jan 31, 2026
acaa3cc
Merge pull request #279 from SpatioCore/dev-api
RobinGummels Jan 31, 2026
feffdf4
Added maximum request-size-limit
RobinGummels Jan 31, 2026
ec18f45
Added Health Enpoint (#288)
RobinGummels Jan 31, 2026
37b9fad
Some kind of item-streaming. Now every source_link will be parsed int…
RobinGummels Jan 31, 2026
c08daf5
Merge pull request #286 from SpatioCore/dev-api
RobinGummels Jan 31, 2026
be443e4
Added LIKE-Operator to CQL2 + final `README.md` + new Queryables `api…
RobinGummels Feb 2, 2026
6789951
Changes `GET /collection-queryables` endpoint address (#302)
RobinGummels Feb 3, 2026
75c2ed3
Enumerates for Queryables (#305)
RobinGummels Feb 3, 2026
f3db330
Dev crawler into dev (#298)
Mammutor Feb 3, 2026
f500968
Version 1.0.0 of UI
jkrumboe Feb 3, 2026
07ddcf8
added ER-Diagram and updatet the README (#303)
SonkeHoffmann Feb 3, 2026
1a78009
Created detailed Project-Readme
RobinGummels Feb 3, 2026
cafbdab
final commit, docker works, also with dependecies and example.env
Mammutor Feb 3, 2026
0b6df37
Merge branch 'dev' of https://github.com/SpatioCore/STAC-Atlas into dev
Mammutor Feb 3, 2026
a7bda11
Last Changes/ Fixes, Tests (#309)
jkrumboe Feb 3, 2026
6cfc8b5
Merge branch 'main' into dev
RobinGummels Feb 3, 2026
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
331 changes: 331 additions & 0 deletions .github/workflows/api-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,331 @@
name: API CI/CD Pipeline

# Trigger: At every push or pull request to dev, dev-api or main branches affecting the api/ directory or this workflow file
on:
push:
branches:
- dev-api
- dev
- main
paths:
- 'api/**'
- 'db/**'
- '.github/workflows/api-ci.yml'
pull_request:
branches:
- dev-api
- dev
- main
paths:
- 'api/**'
- 'db/**'
- '.github/workflows/api-ci.yml'

jobs:
# Job 1: Build and Test
test:
name: Build & Test
runs-on: ubuntu-latest

strategy:
matrix:
node-version: [22.x]

steps:
# Step 1: Checkout Repository
- name: Checkout code
uses: actions/checkout@v4

# Step 2: Setup Node.js
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
cache-dependency-path: api/package-lock.json

# Step 3: Create .env file from secrets
- name: Create .env file
working-directory: api
run: |
cat > .env << EOF
# Server Configuration
PORT=3000
NODE_ENV=test

# Database Configuration
DB_HOST=${{ secrets.DB_HOST }}
DB_PORT=${{ secrets.DB_PORT }}
DB_NAME=${{ secrets.DB_NAME }}
DB_USER=${{ secrets.DB_USER }}
DB_PASSWORD=${{ secrets.DB_PASSWORD }}
DB_SSL=false

# Connection Pool Configuration
DB_POOL_MAX=20
DB_POOL_MIN=2
DB_IDLE_TIMEOUT=30000
DB_CONNECTION_TIMEOUT=10000

# CORS Configuration
CORS_ORIGIN=*

# API Configuration
API_TITLE=STAC Atlas
API_DESCRIPTION=A centralized platform for managing, indexing, and providing STAC Collection metadata
API_VERSION=1.0.0
EOF

# Step 4: Install dependencies
- name: Install dependencies
run: |
cd api
npm ci

# Step 5: Linting (ESLint)
- name: Run ESLint
run: |
cd api
npm run lint --if-present
continue-on-error: true

# Step 6: Run tests
- name: Run tests
run: |
cd api
# Run Jest in-band (single process) with a higher default test timeout
npm test -- --runInBand --testTimeout=30000

# Step 7: Generate coverage report
- name: Generate coverage report
run: |
cd api
npm test -- --runInBand --testTimeout=30000 --coverage --coverageReporters=text --coverageReporters=lcov
continue-on-error: true

# Step 8: Upload coverage as artifact
- name: Upload coverage reports
uses: actions/upload-artifact@v4
if: always()
with:
name: coverage-report
path: api/coverage/
retention-days: 30

# Step 9: Upload test results as artifact
- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results
path: api/test-results/
retention-days: 30

# Job 2: Validate build
build:
name: Validate Build
runs-on: ubuntu-latest
needs: test

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: 'npm'
cache-dependency-path: api/package-lock.json

- name: Create .env file
working-directory: api
run: |
cat > .env << EOF
# Server Configuration
PORT=3000
NODE_ENV=test

# Database Configuration
DB_HOST=${{ secrets.DB_HOST }}
DB_PORT=${{ secrets.DB_PORT }}
DB_NAME=${{ secrets.DB_NAME }}
DB_USER=${{ secrets.DB_USER }}
DB_PASSWORD=${{ secrets.DB_PASSWORD }}
DB_SSL=false

# Connection Pool Configuration
DB_POOL_MAX=20
DB_POOL_MIN=2
DB_IDLE_TIMEOUT=30000
DB_CONNECTION_TIMEOUT=10000

# CORS Configuration
CORS_ORIGIN=*

# API Configuration
API_TITLE=STAC Atlas
API_DESCRIPTION=A centralized platform for managing, indexing, and providing STAC Collection metadata
API_VERSION=1.0.0
EOF

- name: Install dependencies
run: |
cd api
npm ci

- name: Validate application starts
run: |
cd api
timeout 10s npm start || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; fi
continue-on-error: false

# Job 3: STAC API Validator
stac_validator:
name: STAC API Validator (core + collections)
runs-on: ubuntu-latest
needs: test

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: 'npm'
cache-dependency-path: api/package-lock.json

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Create .env file
working-directory: api
run: |
cat > .env << EOF
# Server Configuration
PORT=3000
NODE_ENV=test

# Database Configuration
DB_HOST=${{ secrets.DB_HOST }}
DB_PORT=${{ secrets.DB_PORT }}
DB_NAME=${{ secrets.DB_NAME }}
DB_USER=${{ secrets.DB_USER }}
DB_PASSWORD=${{ secrets.DB_PASSWORD }}
DB_SSL=false

# Connection Pool Configuration
DB_POOL_MAX=20
DB_POOL_MIN=2
DB_IDLE_TIMEOUT=30000
DB_CONNECTION_TIMEOUT=10000

# CORS Configuration
CORS_ORIGIN=*

# API Configuration
API_TITLE=STAC Atlas
API_DESCRIPTION=A centralized platform for managing, indexing, and providing STAC Collection metadata
API_VERSION=1.0.0
EOF

- name: Install Node dependencies
working-directory: api
run: npm ci

- name: Install STAC API Validator
run: |
python -m pip install --upgrade pip
python -m pip install stac-api-validator

- name: Start API server
working-directory: api
run: |
# Start server in background
npm start > server.log 2>&1 &
echo $! > server.pid

# Wait until landing page responds
for i in {1..30}; do
if curl -fsS http://localhost:3000/ > /dev/null; then
echo "API is up"
exit 0
fi
sleep 1
done

echo "API did not start in time"
echo "---- server.log ----"
tail -n 200 server.log || true
exit 1

- name: Run STAC API Validator (core + collections)
run: |
python -m stac_api_validator \
--root-url "http://localhost:3000/" \
--conformance core \
--conformance collections \
--collection africa-agriculture-adaptation-atlas_extreme_hazard_risk_annual \

- name: Upload validator output
uses: actions/upload-artifact@v4
if: always()
with:
name: stac-validator-output
path: stac-validator-output.txt
retention-days: 30

- name: Stop API server
if: always()
working-directory: api
run: |
if [ -f server.pid ]; then
kill "$(cat server.pid)" || true
fi
echo "---- server.log (tail) ----"
tail -n 200 server.log || true

# Job 4: Security Audit
security:
name: Security Audit
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: 'npm'
cache-dependency-path: api/package-lock.json

- name: Run npm audit
run: |
cd api
npm audit --audit-level=moderate
continue-on-error: true

# Job 5: Status-Check for Branch Protection
ci-success:
name: CI Success
runs-on: ubuntu-latest
needs: [test, build, stac_validator, security]
if: always()

steps:
- name: Check all jobs succeeded
run: |
if [ "${{ needs.test.result }}" != "success" ] || [ "${{ needs.build.result }}" != "success" ] || [ "${{ needs.stac_validator.result }}" != "success" ] || [ "${{ needs.security.result }}" != "success" ]; then
echo "CI Pipeline failed!"
echo "Test status: ${{ needs.test.result }}"
echo "Build status: ${{ needs.build.result }}"
exit 1
else
echo "All CI checks passed successfully!"
fi
28 changes: 25 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,25 @@
*
!.gitignore
!bid.md
.env
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
Loading
Loading