Skip to content

Cookiecutter CI

Cookiecutter CI #561

Workflow file for this run

name: Cookiecutter CI
on:
push:
branches:
- "main"
pull_request:
branches:
- "main"
schedule:
# weekly tests
- cron: "0 0 * * 0"
defaults:
run:
shell: bash
env:
ARTIFACT_NAME: demo-mdakit-repos
OUTPUT_DIRECTORY: /home/runner/example_outputs
OUTPUT_COOKIE_SUBDIRECTORY: TestMDAKit_with_host_MDAnalysis_condaforge-deps_and_ReadTheDocs/mdakit-Cookie
GH_USER: github-actions
GH_EMAIL: "github-action@users.noreply.github.com"
GH_REPOSITORY: "github.com/${{ github.repository }}.git"
jobs:
cookiecutter-main-tests:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macOS-latest, windows-latest]
# check last three versions of Python
last-n-minor-python-release: [2, 1, 0]
steps:
- uses: actions/checkout@v4
- id: get-python-version
uses: MDAnalysis/get-latest-python-version@main
with:
last-n-minor-release: ${{ matrix.last-n-minor-python-release }}
- name: Environment information
run: |
uname -a
df -h
ulimit -a
echo "Using Python ${{ steps.get-python-version.outputs.python-version }}"
- name: Set up Python ${{ steps.get-python-version.outputs.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ steps.get-python-version.outputs.python-version }}
- name: Install dependencies
run: |
python -m pip install -U pytest pyyaml cookiecutter
- name: Run cookiecutter tests
run: |
# --keep-test-outputs also saves the generated repositories
if [[ ${{ matrix.os }} == "ubuntu-latest" ]] ; then
PYTEST_FLAGS="--keep-test-outputs ${{ env.OUTPUT_DIRECTORY }}"
else
PYTEST_FLAGS=""
fi
echo "PYTEST_FLAGS=${PYTEST_FLAGS}"
pytest tests/ $PYTEST_FLAGS
- name: check cookie CI presence
if: ${{ matrix.os == 'ubuntu-latest' }}
run: |
ls -la ${{ env.OUTPUT_DIRECTORY }}/
ls -la ${{ env.OUTPUT_DIRECTORY }}/${{ env.OUTPUT_COOKIE_SUBDIRECTORY }}/
- name: Run cookie CI
if: ${{ matrix.os == 'ubuntu-latest' }}
uses: ./.github/actions/run-cookie-ci
with:
source-directory: ${{ env.OUTPUT_DIRECTORY }}/${{ env.OUTPUT_COOKIE_SUBDIRECTORY }}
CODECOV_TOKEN: ${{ secrets.COOKIE_CODECOV_TOKEN }}
- name: Upload artifact
if: ${{ matrix.os == 'ubuntu-latest' && matrix.last-n-minor-python-release == 0 }}
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME }}
path: ${{ env.OUTPUT_DIRECTORY }}
retention-days: 3
update-repo-examples:
if: github.event_name != 'pull_request'
needs: cookiecutter-main-tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Make output directory
run: mkdir $OUTPUT_DIRECTORY
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME }}
path: ${{ env.OUTPUT_DIRECTORY }}
- name: Push to cookie repo
uses: ./.github/actions/push-to-cookie
with:
source-directory: ${{ env.OUTPUT_DIRECTORY }}
target-repository: mdakit-cookie
source-package: mdakit-Cookie
target-ssh-deploy-key: ${{ secrets.MDAKIT_COOKIE_SSH_DEPLOY_KEY }}
- name: Push to remote
env:
GH_USER: github-actions
GH_EMAIL: "github-action@users.noreply.github.com"
GH_REPOSITORY: "github.com/${{ github.repository }}.git"
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# dynamic vars
BRANCH="${GITHUB_REF#refs/heads/}"
REV=$(git rev-parse --short HEAD)
cd $HOME
mkdir examples
cd examples
# set up git
git init
git config user.name $GH_USER
git config user.email $GH_EMAIL
git remote add upstream "https://${GH_USER}:${GH_TOKEN}@${GH_REPOSITORY}"
git fetch --depth 50 upstream $BRANCH examples
git reset upstream/examples
# update examples
for keep in README.md ; do
if [[ -e $keep ]] ; then
cp $keep ${{ env.OUTPUT_DIRECTORY }}/
fi
done
rm -rf *
mv ${{ env.OUTPUT_DIRECTORY }}/* .
# push back to GitHub
git add .
git diff-index --quiet HEAD -- || git commit -m "rebuilt examples from branch ${BRANCH} with CI at ${REV}"
git push -q upstream HEAD:examples
build_docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install conda dependencies
uses: conda-incubator/setup-miniconda@v3
with:
environment-file: docs/requirements.yaml
add-pip-as-python-dependency: true
architecture: x64
miniforge-variant: Mambaforge
use-mamba: true
channels: conda-forge, defaults
activate-environment: cookiecutter-mdakit-docs
auto-update-conda: true
show-channel-urls: true
- name: Build docs
shell: bash -l {0}
working-directory: docs
run: make html
- name: Deploy docs
if: github.event_name != 'pull_request'
working-directory: docs/_build/html
run: |
BRANCH="${GITHUB_REF#refs/heads/}"
REV=$(git rev-parse --short HEAD)
git init
git config user.name $GH_USER
git config user.email $GH_EMAIL
git remote add upstream "https://${GH_USER}:${{ secrets.GITHUB_TOKEN }}@${GH_REPOSITORY}"
git fetch --depth 50 upstream $BRANCH gh-pages
git reset upstream/gh-pages
touch .
touch .nojekyll
git add .
git diff-index --quiet HEAD -- || git commit -m "rebuilt html docs from branch ${BRANCH} with sphinx at ${REV}"
git push -q upstream HEAD:gh-pages