diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml index e38c925..3e98ec8 100644 --- a/.github/workflows/docker-release.yml +++ b/.github/workflows/docker-release.yml @@ -16,6 +16,8 @@ jobs: runs-on: ubuntu-latest permissions: contents: read + id-token: write + attestations: write env: # Optional repo variable. If unset, DOCKERHUB_USERNAME is used. @@ -70,6 +72,13 @@ jobs: context: ./backend file: ./backend/Dockerfile push: true + provenance: mode=max + sbom: true + labels: | + org.opencontainers.image.title=NexaPG Backend + org.opencontainers.image.vendor=Nesterovic IT-Services e.U. + org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} + org.opencontainers.image.version=${{ steps.ver.outputs.clean }} tags: | ${{ steps.ns.outputs.value }}/nexapg-backend:${{ steps.ver.outputs.clean }} ${{ steps.ns.outputs.value }}/nexapg-backend:latest @@ -82,8 +91,15 @@ jobs: context: ./frontend file: ./frontend/Dockerfile push: true + provenance: mode=max + sbom: true build-args: | VITE_API_URL=/api/v1 + labels: | + org.opencontainers.image.title=NexaPG Frontend + org.opencontainers.image.vendor=Nesterovic IT-Services e.U. + org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} + org.opencontainers.image.version=${{ steps.ver.outputs.clean }} tags: | ${{ steps.ns.outputs.value }}/nexapg-frontend:${{ steps.ver.outputs.clean }} ${{ steps.ns.outputs.value }}/nexapg-frontend:latest diff --git a/.github/workflows/pg-compat-matrix.yml b/.github/workflows/pg-compat-matrix.yml index ae28fa8..d4d923b 100644 --- a/.github/workflows/pg-compat-matrix.yml +++ b/.github/workflows/pg-compat-matrix.yml @@ -2,7 +2,7 @@ name: PostgreSQL Compatibility Matrix on: push: - branches: ["main", "master"] + branches: ["main", "master", "development"] pull_request: jobs: diff --git a/backend/Dockerfile b/backend/Dockerfile index e3057c6..2d9b095 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,4 +1,5 @@ -FROM python:3.13-slim AS base +ARG PYTHON_BASE_IMAGE=python:3.13-alpine +FROM ${PYTHON_BASE_IMAGE} AS base ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 @@ -6,11 +7,17 @@ ENV PIP_NO_CACHE_DIR=1 WORKDIR /app -RUN apt-get update \ - && apt-get upgrade -y \ - && rm -rf /var/lib/apt/lists/* +RUN if command -v apt-get >/dev/null 2>&1; then \ + apt-get update && apt-get upgrade -y && rm -rf /var/lib/apt/lists/*; \ + elif command -v apk >/dev/null 2>&1; then \ + apk upgrade --no-cache; \ + fi -RUN addgroup --system app && adduser --system --ingroup app app +RUN if addgroup --help 2>&1 | grep -q -- '--system'; then \ + addgroup --system app && adduser --system --ingroup app app; \ + else \ + addgroup -S app && adduser -S -G app app; \ + fi COPY requirements.txt /app/requirements.txt RUN pip install --upgrade pip && pip install -r /app/requirements.txt diff --git a/backend/app/core/config.py b/backend/app/core/config.py index 899dba8..a0ad1f1 100644 --- a/backend/app/core/config.py +++ b/backend/app/core/config.py @@ -2,7 +2,7 @@ from functools import lru_cache from pydantic import field_validator from pydantic_settings import BaseSettings, SettingsConfigDict -NEXAPG_VERSION = "0.2.0" +NEXAPG_VERSION = "0.2.1" class Settings(BaseSettings):