diff --git a/.github/workflows/docker_release_build.yaml b/.github/workflows/docker_release_build.yaml new file mode 100644 index 0000000..139284a --- /dev/null +++ b/.github/workflows/docker_release_build.yaml @@ -0,0 +1,98 @@ +name: Docker Release Build + +on: + push: + branches-ignore: + - "**" + tags: + - "v*" + +env: + REGISTRY: ghcr.io + +jobs: + build-and-push: + runs-on: ubuntu-20.04 + + permissions: + contents: read + packages: write + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: get_version + id: build_version + run: | + file_path="pyproject.toml" + version=$(awk -F ' = ' '$1=="version" {gsub(/"/, "", $2); print $2}' "$file_path") + echo "VERSION=$version" >> $GITHUB_OUTPUT + + - name: Check Release Variables + run: | + if [[ "v${{ steps.build_version.outputs.VERSION }}" != "${{ github.ref_name }}" ]]; then + echo "pyproject or tag version mismatch" + exit 1 + fi + + # - name: Set up QEMU + # uses: docker/setup-qemu-action@v3 + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build Base image + uses: docker/build-push-action@v5 + with: + context: . + file: ./deploy/Dockerfile_alembic + push: true + # platforms: linux/amd64,linux/arm64 + tags: | + ${{ env.REGISTRY }}/jphacks/kb_2315/base:latest + ${{ env.REGISTRY }}/jphacks/kb_2315/base:${{ steps.build_version.outputs.VERSION }} + + - name: replace base version + run: | + sed -i -e "s/master/${{ steps.build_version.outputs.VERSION }}/" ./deploy/Dockerfile_alembic + sed -i -e "s/master/${{ steps.build_version.outputs.VERSION }}/" ./deploy/Dockerfile_app + sed -i -e "s/master/${{ steps.build_version.outputs.VERSION }}/" ./deploy/Dockerfile_graph + + - name: Build Alembic image + uses: docker/build-push-action@v5 + with: + context: . + file: ./deploy/Dockerfile_alembic + push: true + # platforms: linux/amd64,linux/arm64 + tags: | + ${{ env.REGISTRY }}/jphacks/kb_2315/alembic:latest + ${{ env.REGISTRY }}/jphacks/kb_2315/alembic:${{ steps.build_version.outputs.VERSION }} + + - name: Build FastAPI image + uses: docker/build-push-action@v5 + with: + context: . + file: ./deploy/Dockerfile_app + push: true + # platforms: linux/amd64,linux/arm64 + tags: | + ${{ env.REGISTRY }}/jphacks/kb_2315/app:latest + ${{ env.REGISTRY }}/jphacks/kb_2315/app:${{ steps.build_version.outputs.VERSION }} + + - name: Build Streamlit image + uses: docker/build-push-action@v5 + with: + context: . + file: ./deploy/Dockerfile_graph + push: true + # platforms: linux/amd64,linux/arm64 + tags: | + ${{ env.REGISTRY }}/jphacks/kb_2315/graph:latest + ${{ env.REGISTRY }}/jphacks/kb_2315/graph:${{ steps.build_version.outputs.VERSION }} diff --git a/deploy/Dockerfile_alembic b/deploy/Dockerfile_alembic new file mode 100644 index 0000000..1c45533 --- /dev/null +++ b/deploy/Dockerfile_alembic @@ -0,0 +1,13 @@ +FROM ghcr.io/motty-mio2/kb_2315/base:master as base + +WORKDIR /src +COPY ../. /src/ + +ARG UID=1000 +ARG GID=1000 + +RUN pip install -e . --no-cache-dir + +USER dev + +CMD ["alembic", "upgrade", "head"] diff --git a/deploy/Dockerfile_app b/deploy/Dockerfile_app new file mode 100644 index 0000000..f163b04 --- /dev/null +++ b/deploy/Dockerfile_app @@ -0,0 +1,13 @@ +FROM ghcr.io/motty-mio2/kb_2315/base:master as base + +WORKDIR /src +COPY ../. /src/ + +ARG UID=1000 +ARG GID=1000 + +RUN pip install -e . --no-cache-dir + +USER dev + +CMD ["python", "./src/main.py"] diff --git a/deploy/Dockerfile_graph b/deploy/Dockerfile_graph new file mode 100644 index 0000000..3d24cb7 --- /dev/null +++ b/deploy/Dockerfile_graph @@ -0,0 +1,20 @@ +FROM ghcr.io/motty-mio2/kb_2315/base:master as base + +WORKDIR /src +COPY ../. /src/ + +ARG UID=1000 +ARG GID=1000 + +RUN pip install -e . --no-cache-dir + +USER dev + +CMD ["streamlit", "run", "./src/graph.py", \ + "--browser.gatherUsageStats=false", \ + "--server.address=0.0.0.0", \ + "--server.baseUrlPath=analyze", \ + "--server.port=8501", \ + "--server.enableCORS=false", \ + "--server.enableXsrfProtection=false" \ + ]