-
-
Notifications
You must be signed in to change notification settings - Fork 751
Migrate CI Pipeline to GitHub Actions #1284
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
4d4dfe4
Migrate CI Pipeline to GitHub Actions
SebastiaanZ 8588d2d
Add CI dependency coveralls to our Pipfile
SebastiaanZ 5d50adf
Stop Checkout Actions from persisting credentials
SebastiaanZ 135ecf5
Set flake8 action checkName to correct value
SebastiaanZ 7f3dee1
Remove codeql analysis as it had little effect
SebastiaanZ dbe2f00
Add documentation to GitHub Actions steps
SebastiaanZ 9880089
Push container to both DockerHub and GHCR
SebastiaanZ a66e4e8
Remove DockerHub from GitHub Actions
SebastiaanZ 244a72f
Use GHCR for the site container in docker-compose
SebastiaanZ File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,157 @@ | ||
| name: Lint, Test, Build | ||
|
|
||
| on: | ||
| push: | ||
| branches: | ||
| - master | ||
| # We use pull_request_target as we get PRs from | ||
| # forks, but need to be able to add annotations | ||
| # for our flake8 step. | ||
| pull_request_target: | ||
|
|
||
|
|
||
| jobs: | ||
| lint-test: | ||
| runs-on: ubuntu-latest | ||
| env: | ||
| # Dummy values for required bot environment variables | ||
| BOT_API_KEY: foo | ||
| BOT_SENTRY_DSN: blah | ||
| BOT_TOKEN: bar | ||
| REDDIT_CLIENT_ID: spam | ||
| REDDIT_SECRET: ham | ||
| REDIS_PASSWORD: '' | ||
|
|
||
| # Configure pip to cache dependencies and do a user install | ||
| PIP_NO_CACHE_DIR: false | ||
| PIP_USER: 1 | ||
|
|
||
| # Hide the graphical elements from pipenv's output | ||
| PIPENV_HIDE_EMOJIS: 1 | ||
| PIPENV_NOSPIN: 1 | ||
|
|
||
| # Make sure pipenv does not try reuse an environment it's running in | ||
| PIPENV_IGNORE_VIRTUALENVS: 1 | ||
|
|
||
| # Specify explicit paths for python dependencies and the pre-commit | ||
| # environment so we know which directories to cache | ||
| PYTHONUSERBASE: ${{ github.workspace }}/.cache/py-user-base | ||
| PRE_COMMIT_HOME: ${{ github.workspace }}/.cache/pre-commit-cache | ||
|
|
||
| steps: | ||
| - name: Add custom PYTHONUSERBASE to PATH | ||
| run: echo '${{ env.PYTHONUSERBASE }}/bin/' >> $GITHUB_PATH | ||
|
|
||
| # We don't want to persist credentials, as our GitHub Action | ||
| # may be run when a PR is made from a fork. | ||
| - name: Checkout repository | ||
| uses: actions/checkout@v2 | ||
| with: | ||
| persist-credentials: false | ||
|
|
||
| - name: Setup python | ||
| id: python | ||
| uses: actions/setup-python@v2 | ||
| with: | ||
| python-version: '3.8' | ||
|
|
||
| # 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 | ||
| with: | ||
| path: ${{ env.PYTHONUSERBASE }} | ||
| key: "python-0-${{ runner.os }}-${{ env.PYTHONUSERBASE }}-\ | ||
| ${{ steps.python.outputs.python-version }}-\ | ||
| ${{ hashFiles('./Pipfile', './Pipfile.lock') }}" | ||
|
|
||
| # Install our dependencies if we did not restore a dependency cache | ||
| - name: Install dependencies using pipenv | ||
| if: steps.python_cache.outputs.cache-hit != 'true' | ||
|
MarkKoz marked this conversation as resolved.
|
||
| run: | | ||
| pip install pipenv | ||
| pipenv install --dev --deploy --system | ||
|
|
||
| # 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. | ||
| - name: Run pre-commit hooks | ||
| run: export PIP_USER=0; SKIP=flake8 pre-commit run --all-files | ||
|
MarkKoz marked this conversation as resolved.
|
||
|
|
||
| # This step requires `pull_request_target`, as adding annotations | ||
| # requires "write" permissions to the repo. | ||
| - name: Run flake8 | ||
| uses: julianwachholz/flake8-action@v1 | ||
| with: | ||
| checkName: lint-test | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
|
||
| # We run `coverage` using the `python` command so we can suppress | ||
| # irrelevant warnings in our CI output. | ||
| - name: Run tests and generate coverage report | ||
| run: | | ||
| python -Wignore -m coverage run -m unittest | ||
| coverage report -m | ||
|
|
||
| # This step will publish the coverage reports coveralls.io and | ||
| # print a "job" link in the output of the GitHub Action | ||
| - name: Publish coverage report to coveralls.io | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| run: coveralls | ||
|
|
||
| build-and-push: | ||
| needs: lint-test | ||
| if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/master' | ||
|
MarkKoz marked this conversation as resolved.
|
||
| runs-on: ubuntu-latest | ||
|
|
||
| steps: | ||
| # Create a commit SHA-based tag for the container repositories | ||
| - name: Create SHA Container Tag | ||
| id: sha_tag | ||
| run: | | ||
| tag=$(cut -c 1-7 <<< $GITHUB_SHA) | ||
| echo "::set-output name=tag::$tag" | ||
| - name: Checkout code | ||
| uses: actions/checkout@v2 | ||
|
|
||
| - name: Set up Docker Buildx | ||
| uses: docker/setup-buildx-action@v1 | ||
|
|
||
| - name: Login to Github Container Registry | ||
| uses: docker/login-action@v1 | ||
| with: | ||
| registry: ghcr.io | ||
| username: ${{ github.repository_owner }} | ||
| password: ${{ secrets.GHCR_TOKEN }} | ||
|
|
||
| # This step builds and pushed the container to the | ||
| # Github Container Registry tagged with "latest" and | ||
| # the short SHA of the commit. | ||
| - name: Build and push | ||
| uses: docker/build-push-action@v2 | ||
| with: | ||
| context: . | ||
| file: ./Dockerfile | ||
| push: true | ||
| cache-from: type=registry,ref=ghcr.io/python-discord/bot:latest | ||
| tags: | | ||
| ghcr.io/python-discord/bot:latest | ||
| ghcr.io/python-discord/bot:${{ steps.sha_tag.outputs.tag }} | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.