Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 5 additions & 57 deletions .github/workflows/lint-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,57 +33,16 @@ jobs:
REDDIT_SECRET: ham
REDIS_PASSWORD: ''

# Configure pip to cache dependencies and do a user install
PIP_NO_CACHE_DIR: false
PIP_USER: 1

# Make sure package manager does not use virtualenv
POETRY_VIRTUALENVS_CREATE: false

# Specify explicit paths for python dependencies and the pre-commit
# environment so we know which directories to cache
POETRY_CACHE_DIR: ${{ github.workspace }}/.cache/py-user-base
PYTHONUSERBASE: ${{ github.workspace }}/.cache/py-user-base
PRE_COMMIT_HOME: ${{ github.workspace }}/.cache/pre-commit-cache

# See https://github.com/pre-commit/pre-commit/issues/2178#issuecomment-1002163763
# for why we set this.
SETUPTOOLS_USE_DISTUTILS: stdlib

steps:
- name: Add custom PYTHONUSERBASE to PATH
run: echo '${{ env.PYTHONUSERBASE }}/bin/' >> $GITHUB_PATH

- name: Checkout repository
uses: actions/checkout@v2

- name: Setup python
id: python
uses: actions/setup-python@v2
with:
python-version: '3.10'

# This step caches our Python dependencies. To make sure we
# only restore a cache when the dependencies, the python version,
# the runner operating system, and the dependency location haven't
# changed, we create a cache key that is a composite of those states.
#
# Only when the context is exactly the same, we will restore the cache.
- name: Python Dependency Caching
uses: actions/cache@v2
id: python_cache
- name: Install Python Dependencies
uses: HassanAbouelela/actions/setup-python@setup-python_v1.3.1
with:
path: ${{ env.PYTHONUSERBASE }}
key: "python-0-${{ runner.os }}-${{ env.PYTHONUSERBASE }}-\
${{ steps.python.outputs.python-version }}-\
${{ hashFiles('./pyproject.toml', './poetry.lock') }}"

# Install our dependencies if we did not restore a dependency cache
- name: Install dependencies using poetry
if: steps.python_cache.outputs.cache-hit != 'true'
run: |
pip install poetry
poetry install
# Set dev=true to install flake8 extensions, which are dev dependencies
dev: true
python_version: '3.10'

# Check all of our non-dev dependencies are compatible with the MIT license.
# If you added a new dependencies that is being rejected,
Expand All @@ -94,17 +53,6 @@ jobs:
pip-licenses --allow-only="$ALLOWED_LICENSE" \
--package $(poetry export -f requirements.txt --without-hashes | sed "s/==.*//g" | tr "\n" " ")

# This step caches our pre-commit environment. To make sure we
# do create a new environment when our pre-commit setup changes,
# we create a cache key based on relevant factors.
- name: Pre-commit Environment Caching
uses: actions/cache@v2
with:
path: ${{ env.PRE_COMMIT_HOME }}
key: "precommit-0-${{ runner.os }}-${{ env.PRE_COMMIT_HOME }}-\
${{ steps.python.outputs.python-version }}-\
${{ hashFiles('./.pre-commit-config.yaml') }}"

# We will not run `flake8` here, as we will use a separate flake8
# action. As pre-commit does not support user installs, we set
# PIP_USER=0 to not do a user install.
Expand Down
32 changes: 17 additions & 15 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,28 +1,30 @@
FROM --platform=linux/amd64 python:3.10-slim

# Set pip to have no saved cache
ENV PIP_NO_CACHE_DIR=false \
POETRY_VIRTUALENVS_CREATE=false
# Define Git SHA build argument for sentry
ARG git_sha="development"

ENV POETRY_VERSION=1.2.0 \
POETRY_HOME="/opt/poetry" \
POETRY_NO_INTERACTION=1 \
APP_DIR="/bot" \
GIT_SHA=$git_sha

ENV PATH="$POETRY_HOME/bin:$PATH"

# Install poetry
RUN pip install -U poetry
RUN apt-get update \
&& apt-get -y upgrade \
&& apt-get install --no-install-recommends -y curl \
&& apt-get clean && rm -rf /var/lib/apt/lists/*

# Create the working directory
WORKDIR /bot
RUN curl -sSL https://install.python-poetry.org | python

# Install project dependencies
WORKDIR $APP_DIR
COPY pyproject.toml poetry.lock ./
RUN poetry install --no-dev

# Define Git SHA build argument
ARG git_sha="development"

# Set Git SHA environment variable for Sentry
ENV GIT_SHA=$git_sha

# Copy the source code in last to optimize rebuilding the image
COPY . .

ENTRYPOINT ["python3"]
CMD ["-m", "bot"]
ENTRYPOINT ["poetry"]
CMD ["run", "python", "-m", "bot"]