diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index c466e70..a247ec3 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -8,7 +8,7 @@ on: - dev-indep jobs: - build-docker: + cpython-build-docker: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -45,3 +45,40 @@ jobs: tags: ytorg/yotter:latest cache-from: type=local,src=cache cache-to: type=local,dest=cache + pypy-build-docker: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + with: + platforms: all + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1 + with: + version: latest + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Get hash of latest image + run: docker pull pypy:3-slim-buster && docker inspect --format='{{index .RepoDigests 0}}' pypy:3-slim-buster > dockerhash.txt + - name: cache docker cache + uses: actions/cache@v2.1.2 + with: + path: ${{ github.workspace }}/cache + key: ${{ runner.os }}-docker-${{ hashFiles('**/requirements.txt') }}-${{ hashFiles('**/dockerhash.txt') }} + restore-keys: | + ${{ runner.os }}-docker- + - name: Build and push + uses: docker/build-push-action@v2 + with: + context: . + file: ./pypy.Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + tags: ytorg/yotter:pypy + cache-from: type=local,src=cache + cache-to: type=local,dest=cache diff --git a/pypy.Dockerfile b/pypy.Dockerfile new file mode 100644 index 0000000..347cdb4 --- /dev/null +++ b/pypy.Dockerfile @@ -0,0 +1,40 @@ +FROM pypy:3-slim-buster AS base + +# Image to Build Dependencies +FROM base AS builder + +WORKDIR /usr/src/app + +COPY ./requirements.txt /usr/src/app + +# Build Dependencies +RUN apt-get update \ + && apt-get install -yq build-essential libssl-dev libffi-dev libxml2-dev libxslt-dev zlib1g-dev \ + && rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/* + +# Python Dependencies +RUN pip install --no-warn-script-location --ignore-installed --no-cache-dir --prefix=/install wheel cryptography gunicorn pymysql +RUN pip install --no-warn-script-location --ignore-installed --no-cache-dir --prefix=/install -r requirements.txt + +# Runtime Environment Image +FROM base + +WORKDIR /usr/src/app + +COPY --from=builder /install/bin /usr/local/bin +COPY --from=builder /install/site-packages /opt/pypy/site-packages + +RUN apt-get update && apt-get install -y \ + libxml2 libxslt1.1 \ + && rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/* + +COPY . . + +RUN flask db init + +CMD flask db stamp head \ + && flask db migrate \ + && flask db upgrade \ + && gunicorn -b 0.0.0.0:5000 -k gevent -w 4 yotter:app + +EXPOSE 5000