-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
update python-copier-template to branch ci-split
- Loading branch information
Showing
21 changed files
with
387 additions
and
431 deletions.
There are no files selected for viewing
This file contains 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 |
---|---|---|
@@ -1,5 +1,5 @@ | ||
# Changes here will be overwritten by Copier | ||
_commit: 1.0.0 | ||
_commit: 1.0.0-8-g1361223 | ||
_src_path: gh:DiamondLightSource/python-copier-template | ||
author_email: [email protected] | ||
author_name: Tom Cobb | ||
|
This file contains 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
This file contains 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 |
---|---|---|
@@ -1,60 +1,34 @@ | ||
name: Install requirements | ||
description: Run pip install with requirements and upload resulting requirements | ||
description: Install a version of python then call pip install and report what was installed | ||
inputs: | ||
requirements_file: | ||
description: Name of requirements file to use and upload | ||
required: true | ||
install_options: | ||
python-version: | ||
description: Python version to install, default is from Dockerfile | ||
default: "dev" | ||
pip-install: | ||
description: Parameters to pass to pip install | ||
required: true | ||
artifact_name: | ||
description: A user friendly name to give the produced artifacts | ||
required: true | ||
python_version: | ||
description: Python version to install | ||
default: "3.x" | ||
default: "-e .[dev]" | ||
|
||
runs: | ||
using: composite | ||
|
||
steps: | ||
- name: Get version of python | ||
run: | | ||
PYTHON_VERSION="${{ inputs.python-version }}" | ||
if [ $PYTHON_VERSION == "dev" ]; then | ||
PYTHON_VERSION=$(sed -n "s/ARG PYTHON_VERSION=//p" Dockerfile) | ||
fi | ||
echo "PYTHON_VERSION=$PYTHON_VERSION" >> "$GITHUB_ENV" | ||
shell: bash | ||
|
||
- name: Setup python | ||
uses: actions/setup-python@v5 | ||
with: | ||
python-version: ${{ inputs.python_version }} | ||
python-version: ${{ env.PYTHON_VERSION }} | ||
|
||
- name: Pip install | ||
run: | | ||
touch ${{ inputs.requirements_file }} | ||
# -c uses requirements.txt as constraints, see 'Validate requirements file' | ||
pip install -c ${{ inputs.requirements_file }} ${{ inputs.install_options }} | ||
- name: Install packages | ||
run: pip install ${{ inputs.pip-install }} | ||
shell: bash | ||
|
||
- name: Create lockfile | ||
run: | | ||
mkdir -p lockfiles | ||
pip freeze --exclude-editable > lockfiles/${{ inputs.requirements_file }} | ||
# delete the self referencing line and make sure it isn't blank | ||
sed -i'' -e '/file:/d' lockfiles/${{ inputs.requirements_file }} | ||
shell: bash | ||
|
||
- name: Upload lockfiles | ||
uses: actions/[email protected] | ||
with: | ||
name: lockfiles-${{ inputs.python_version }}-${{ inputs.artifact_name }}-${{ github.sha }} | ||
path: lockfiles | ||
|
||
# This eliminates the class of problems where the requirements being given no | ||
# longer match what the packages themselves dictate. E.g. In the rare instance | ||
# where I install some-package which used to depend on vulnerable-dependency | ||
# but now uses good-dependency (despite being nominally the same version) | ||
# pip will install both if given a requirements file with -r | ||
- name: If requirements file exists, check it matches pip installed packages | ||
run: | | ||
if [ -s ${{ inputs.requirements_file }} ]; then | ||
if ! diff -u ${{ inputs.requirements_file }} lockfiles/${{ inputs.requirements_file }}; then | ||
echo "Error: ${{ inputs.requirements_file }} need the above changes to be exhaustive" | ||
exit 1 | ||
fi | ||
fi | ||
- name: Report what was installed | ||
run: pip freeze | ||
shell: bash |
This file contains 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
This file contains 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
This file contains 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,28 @@ | ||
on: | ||
workflow_call: | ||
outputs: | ||
not-in-pr: | ||
description: The PR number if the branch is in one | ||
value: ${{ jobs.pr.outputs.not-in-pr }} | ||
|
||
jobs: | ||
pr: | ||
runs-on: "ubuntu-latest" | ||
outputs: | ||
not-in-pr: ${{ steps.script.outputs.result }} | ||
steps: | ||
- uses: actions/github-script@v7 | ||
id: script | ||
if: github.event_name == 'push' | ||
with: | ||
script: | | ||
const prs = await github.rest.pulls.list({ | ||
owner: context.repo.owner, | ||
repo: context.repo.repo, | ||
head: context.repo.owner + ':${{ github.ref_name }}' | ||
}) | ||
if (prs.data.length) { | ||
console.log(`::notice ::Skipping CI on branch push as it is already run in PR #${prs.data[0]["number"]}`) | ||
} else { | ||
return "not-in-pr" | ||
} |
This file contains 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,56 @@ | ||
on: | ||
workflow_call: | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
# Need this to get version number from last tag | ||
fetch-depth: 0 | ||
|
||
- name: Set up Docker Buildx | ||
id: buildx | ||
uses: docker/setup-buildx-action@v3 | ||
|
||
- name: Log in to GitHub Docker Registry | ||
if: github.event_name != 'pull_request' | ||
uses: docker/login-action@v3 | ||
with: | ||
registry: ghcr.io | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: Build and export to Docker local cache | ||
uses: docker/build-push-action@v5 | ||
with: | ||
context: . | ||
# Need load and tags so we can test it below | ||
load: true | ||
tags: tag_for_testing | ||
|
||
- name: Test cli works in cached runtime image | ||
run: docker run --rm tag_for_testing --version | ||
|
||
- name: Create tags for publishing image | ||
id: meta | ||
uses: docker/metadata-action@v5 | ||
with: | ||
images: ghcr.io/${{ github.repository }} | ||
tags: | | ||
type=ref,event=tag | ||
type=raw,value=latest | ||
- name: Push cached image to container registry | ||
if: github.ref_type == 'tag' | ||
uses: docker/build-push-action@v5 | ||
# This does not build the image again, it will find the image in the | ||
# Docker cache and publish it | ||
with: | ||
context: . | ||
push: true | ||
tags: ${{ steps.meta.outputs.tags }} | ||
labels: ${{ steps.meta.outputs.labels }} |
This file contains 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,36 @@ | ||
on: | ||
workflow_call: | ||
|
||
jobs: | ||
build: | ||
runs-on: "ubuntu-latest" | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
# Need this to get version number from last tag | ||
fetch-depth: 0 | ||
|
||
- name: Build sdist and wheel | ||
run: > | ||
export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) && | ||
pipx run build | ||
- name: Upload sdist and wheel as artifacts | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: dist | ||
path: dist | ||
|
||
- name: Check for packaging errors | ||
run: pipx run twine check --strict dist/* | ||
|
||
- name: Install produced wheel | ||
uses: ./.github/actions/install_requirements | ||
with: | ||
pip-install: dist/*.whl | ||
|
||
- name: Test module --version works using the installed wheel | ||
# If more than one module in src/ replace with module name to test | ||
run: python -m $(ls --hide='*.egg-info' src | head -1) --version |
This file contains 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 |
---|---|---|
@@ -1,54 +1,53 @@ | ||
name: Docs CI | ||
|
||
on: | ||
push: | ||
pull_request: | ||
workflow_call: | ||
|
||
jobs: | ||
docs: | ||
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository | ||
build: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Avoid git conflicts when tag and branch pushed at same time | ||
if: startsWith(github.ref, 'refs/tags') | ||
run: sleep 60 | ||
|
||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
# Need this to get version number from last tag | ||
fetch-depth: 0 | ||
|
||
- name: Install system packages | ||
# Can delete this if you don't use graphviz in your docs | ||
run: sudo apt-get install graphviz | ||
|
||
- name: Install python packages | ||
uses: ./.github/actions/install_requirements | ||
with: | ||
requirements_file: requirements-dev-3.x.txt | ||
install_options: -e .[dev] | ||
artifact_name: docs | ||
|
||
- name: Build docs | ||
run: tox -e docs | ||
|
||
- name: Remove environment.pickle | ||
run: rm build/html/.doctrees/environment.pickle | ||
|
||
- name: Sanitize ref name for docs version | ||
run: echo "DOCS_VERSION=${GITHUB_REF_NAME//[^A-Za-z0-9._-]/_}" >> $GITHUB_ENV | ||
|
||
- name: Move to versioned directory | ||
run: mv build/html .github/pages/$DOCS_VERSION | ||
run: mv build/html build/$DOCS_VERSION | ||
|
||
- name: Upload built docs artifact | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: docs | ||
path: build | ||
|
||
- name: Add other static pages files | ||
run: cp .github/pages/* build | ||
|
||
- name: Write switcher.json | ||
run: python .github/pages/make_switcher.py --add $DOCS_VERSION ${{ github.repository }} .github/pages/switcher.json | ||
run: python .github/pages/make_switcher.py --add $DOCS_VERSION ${{ github.repository }} build/switcher.json | ||
|
||
- name: Publish Docs to gh-pages | ||
if: github.event_name == 'push' && github.actor != 'dependabot[bot]' | ||
if: github.ref_type == 'tag' || github.ref_name == 'main' | ||
# We pin to the SHA, not the tag, for security reasons. | ||
# https://docs.github.com/en/actions/learn-github-actions/security-hardening-for-github-actions#using-third-party-actions | ||
uses: peaceiris/actions-gh-pages@64b46b4226a4a12da2239ba3ea5aa73e3163c75b # v3.9.1 | ||
uses: peaceiris/actions-gh-pages@373f7f263a76c20808c831209c920827a82a2847 # v3.9.3 | ||
with: | ||
github_token: ${{ secrets.GITHUB_TOKEN }} | ||
publish_dir: .github/pages | ||
publish_dir: build | ||
keep_files: true |
Oops, something went wrong.