Skip to content

Commit

Permalink
Add Dockerfile and workflow for building and pushing Docker image to …
Browse files Browse the repository at this point in the history
…ghcr
  • Loading branch information
jeancochrane committed Oct 24, 2023
1 parent e956384 commit c565cd1
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 0 deletions.
55 changes: 55 additions & 0 deletions .github/workflows/deploy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: deploy

on:
pull_request:
push:
branches: [main, '*-assessment-year']

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
publish-docker-image:
runs-on: ubuntu-latest
# Set token permissions so that we can publish to GitHub Container Registry
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
# Tag the following types of images:
# * On a branch, tag with the branch name (e.g. `master`)
# * On a PR, tag with the PR number (e.g. `pr-12`)
# * On all events, tag with the short git SHA (e.g. `e956384`)
tags: |
type=ref,event=branch
type=ref,event=pr
type=sha
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
33 changes: 33 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
FROM rocker/r-ver:4.3.1

ENV RENV_CONFIG_REPOS_OVERRIDE "https://cloud.r-project.org/"

# Configure renv and pip for caching
ENV RENV_PATHS_CACHE cache
ENV RENV_PATHS_LIBRARY renv/library
ENV PIP_CACHE_DIR cache

# Install system dependencies
RUN apt-get update && apt-get install --no-install-recommends -y \
libcurl4-openssl-dev libssl-dev libxml2-dev libgit2-dev git \
libudunits2-dev python3-dev python3-pip

# Install DVC to fetch data from S3 using dvc pull
RUN pip install aiobotocore[boto3] boto3 dvc[s3]

# Install renv for R dependencies
RUN Rscript -e "install.packages('renv')"

# Copy R lockfile into the container. The reason this is a separate step from
# the later step that adds files from the working directory is because we want
# to avoid having to reinstall dependencies every time a file in the directory
# changes, as Docker will bust the cache of every layer following a layer that
# needs to change
COPY renv.lock renv.lock

# Install R dependencies
RUN Rscript -e 'renv::restore()'

# Copy the directory into the container
ADD ./ model-res-avm/
WORKDIR model-res-avm/

0 comments on commit c565cd1

Please sign in to comment.