diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index d084a70..d60ecf9 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -74,28 +74,3 @@ jobs: tag: ghcr.io/k2patel/apcupsd-client:latest keyring-append: melange.rsa.pub - build-docker: - runs-on: ubuntu-latest - needs: lint-and-test - if: github.event_name != 'pull_request' - steps: - - name: Set Image name - run: | - echo "IMAGE_NAME=k2patel/apcupsd-client:latest" >> $GITHUB_ENV - - - name: Checkout code - uses: actions/checkout@v4 - - - name: Log in to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_TOKEN }} - - - name: Build the Docker image - id: build - run: | - docker build . -t ${{ env.IMAGE_NAME }} - - - name: Push the Docker image - run: docker push ${{ env.IMAGE_NAME }} diff --git a/apko.yaml b/apko.yaml index 3265158..62d19e6 100644 --- a/apko.yaml +++ b/apko.yaml @@ -1,11 +1,11 @@ contents: repositories: - - https://dl-cdn.alpinelinux.org/alpine/edge/main - - https://dl-cdn.alpinelinux.org/alpine/edge/community + - https://dl-cdn.alpinelinux.org/alpine/v3.21/main + - https://dl-cdn.alpinelinux.org/alpine/v3.21/community - '@local ./packages' packages: - - alpine-baselayout - - busybox + - alpine-baselayout-data + - ca-certificates-bundle - python3 - apcupsd - apcupsd-client@local @@ -26,6 +26,11 @@ environment: REDIS_URL: "redis://redis:6379/0" entrypoint: - command: /usr/bin/start-server + command: /app/.venv/bin/python + services: + uvicorn: + command: /app/.venv/bin/python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 + +cmd: "-m uvicorn app.main:app --host 0.0.0.0 --port 8000" work-dir: /app diff --git a/melange.yaml b/melange.yaml index 5a222d5..8ee1152 100644 --- a/melange.yaml +++ b/melange.yaml @@ -9,18 +9,14 @@ package: environment: contents: repositories: - - https://dl-cdn.alpinelinux.org/alpine/edge/main - - https://dl-cdn.alpinelinux.org/alpine/edge/community + - https://dl-cdn.alpinelinux.org/alpine/v3.21/main + - https://dl-cdn.alpinelinux.org/alpine/v3.21/community packages: - alpine-baselayout - busybox - python3 - - python3-dev - py3-pip - py3-virtualenv - - gcc - - musl-dev - - libffi-dev pipeline: - name: Create virtualenv and install dependencies @@ -30,6 +26,7 @@ pipeline: python3 -m virtualenv "${{targets.destdir}}/app/.venv" "${{targets.destdir}}/app/.venv/bin/pip" install \ --no-cache-dir \ + --only-binary :all: \ -r requirements.prod.txt - name: Copy application source @@ -37,23 +34,26 @@ pipeline: set -ex cp -r app/ "${{targets.destdir}}/app/app/" - - name: Create entrypoint script - runs: | - set -ex - mkdir -p "${{targets.destdir}}/usr/bin" - cat > "${{targets.destdir}}/usr/bin/start-server" <<'SCRIPT' - #!/bin/sh - exec /app/.venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000 - SCRIPT - chmod +x "${{targets.destdir}}/usr/bin/start-server" - - name: Fix virtualenv shebangs runs: | set -ex - # Rewrite shebangs so they reference the final installed path find "${{targets.destdir}}/app/.venv/bin" -type f -exec \ sed -i "s|${{targets.destdir}}||g" {} + + - name: Strip build artifacts from virtualenv + runs: | + set -ex + rm -rf "${{targets.destdir}}/app/.venv/bin/pip"* + rm -rf "${{targets.destdir}}/app/.venv/bin/wheel"* + rm -rf "${{targets.destdir}}/app/.venv/lib/python*/site-packages/pip" + rm -rf "${{targets.destdir}}/app/.venv/lib/python*/site-packages/pip-*" + rm -rf "${{targets.destdir}}/app/.venv/lib/python*/site-packages/setuptools" + rm -rf "${{targets.destdir}}/app/.venv/lib/python*/site-packages/setuptools-*" + rm -rf "${{targets.destdir}}/app/.venv/lib/python*/site-packages/wheel" + rm -rf "${{targets.destdir}}/app/.venv/lib/python*/site-packages/wheel-*" + find "${{targets.destdir}}/app/.venv" -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true + find "${{targets.destdir}}/app/.venv" -name "*.pyc" -delete 2>/dev/null || true + data: - name: runtime-deps items: