Skip to content

Commit

Permalink
Merge pull request #4 from ecmwf-projects/COPDS-1893
Browse files Browse the repository at this point in the history
COPDS-1893: Cookiecutter
  • Loading branch information
EddyCMWF authored Jul 19, 2024
2 parents d7ec798 + 0e0fa9d commit 536810b
Show file tree
Hide file tree
Showing 27 changed files with 654 additions and 127 deletions.
19 changes: 19 additions & 0 deletions .cruft.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"template": "https://github.com/ecmwf-projects/cookiecutter-conda-package",
"commit": "3b34cec552be24da244f3ec6133685c83a4e9f6c",
"checkout": null,
"context": {
"cookiecutter": {
"project_name": "cads-mars-server",
"project_slug": "cads_mars_server",
"project_short_description": "A proxy MARS server and client designed for CADS",
"copyright_holder": "European Union",
"copyright_year": "2024",
"mypy_strict": false,
"integration_tests": "true",
"pypi": true,
"_template": "https://github.com/ecmwf-projects/cookiecutter-conda-package"
}
},
"directory": null
}
235 changes: 235 additions & 0 deletions .github/workflows/on-push.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,235 @@
name: on-push

on:
push:
branches:
- main
tags:
- '*'
pull_request:
branches:
- main

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

defaults:
run:
shell: bash -l {0}

jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.x
- uses: pre-commit/action@v3.0.1

combine-environments:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.x
- name: Install conda-merge
run: |
python -m pip install conda-merge
- name: Combine environments
run: |
for SUFFIX in ci integration; do
conda-merge ci/environment-$SUFFIX.yml environment.yml > ci/combined-environment-$SUFFIX.yml || exit
done
- uses: actions/upload-artifact@v4
with:
name: combined-environments
path: ci/combined-environment-*.yml

unit-tests:
name: unit-tests
needs: combine-environments
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.11']

steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: combined-environments
path: ci
- name: Get current date
id: date
run: echo "date=$(date +%Y-%m-%d)" >> "${GITHUB_OUTPUT}"
- uses: mamba-org/setup-micromamba@v1
with:
environment-file: ci/combined-environment-ci.yml
environment-name: DEVELOP
cache-environment: true
cache-environment-key: environment-${{ steps.date.outputs.date }}
cache-downloads-key: downloads-${{ steps.date.outputs.date }}
create-args: >-
python=${{ matrix.python-version }}
- name: Install package
run: |
python -m pip install --no-deps -e .
- name: Run tests
run: |
make unit-tests COV_REPORT=xml
type-check:
needs: [combine-environments, unit-tests]
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: combined-environments
path: ci
- name: Get current date
id: date
run: echo "date=$(date +%Y-%m-%d)" >> "${GITHUB_OUTPUT}"
- uses: mamba-org/setup-micromamba@v1
with:
environment-file: ci/combined-environment-ci.yml
environment-name: DEVELOP
cache-environment: true
cache-environment-key: environment-${{ steps.date.outputs.date }}
cache-downloads-key: downloads-${{ steps.date.outputs.date }}
create-args: >-
python=3.11
- name: Install package
run: |
python -m pip install --no-deps -e .
- name: Run code quality checks
run: |
make type-check
docs-build:
needs: [combine-environments, unit-tests]
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: combined-environments
path: ci
- name: Get current date
id: date
run: echo "date=$(date +%Y-%m-%d)" >> "${GITHUB_OUTPUT}"
- uses: mamba-org/setup-micromamba@v1
with:
environment-file: ci/combined-environment-ci.yml
environment-name: DEVELOP
cache-environment: true
cache-environment-key: environment-${{ steps.date.outputs.date }}
cache-downloads-key: downloads-${{ steps.date.outputs.date }}
create-args: >-
python=3.11
- name: Install package
run: |
python -m pip install --no-deps -e .
- name: Build documentation
run: |
make docs-build
integration-tests:
needs: [combine-environments, unit-tests]
if: |
success() && true
runs-on: ubuntu-latest

strategy:
matrix:
include:
- python-version: '3.6'
extra: -integration

steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: combined-environments
path: ci
- name: Get current date
id: date
run: echo "date=$(date +%Y-%m-%d)" >> "${GITHUB_OUTPUT}"
- uses: mamba-org/setup-micromamba@v1
with:
environment-file: ci/combined-environment${{ matrix.extra }}.yml
environment-name: DEVELOP${{ matrix.extra }}
cache-environment: true
cache-environment-key: environment-${{ steps.date.outputs.date }}
cache-downloads-key: downloads-${{ steps.date.outputs.date }}
create-args: >-
python=${{ matrix.python-version }}
- name: Install package
run: |
python -m pip install --no-deps -e .
- name: Run tests
run: |
make unit-tests COV_REPORT=xml
distribution:
runs-on: ubuntu-latest
needs: [unit-tests, type-check, docs-build, integration-tests]
if: |
always() &&
needs.unit-tests.result == 'success' &&
needs.type-check.result == 'success' &&
needs.docs-build.result == 'success' &&
(needs.integration-tests.result == 'success' || needs.integration-tests.result == 'skipped')
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install package
run: |
python -m pip install --upgrade pip
python -m pip install build twine
- name: Build distribution
run: |
python -m build
- name: Check wheels
run: |
cd dist || exit
python -m pip install cads_mars_server*.whl || exit
python -m twine check --strict * || exit
python -c "import cads_mars_server" || exit
cd ..
- uses: actions/upload-artifact@v4
with:
name: distribution
path: dist

upload-to-pypi:
runs-on: ubuntu-latest
needs: distribution
if: |
always() && false &&
needs.distribution.result == 'success' &&
github.event_name == 'push' &&
startsWith(github.ref, 'refs/tags')
environment:
name: pypi
url: https://pypi.org/p/cads-mars-server
permissions:
id-token: write # IMPORTANT: this permission is mandatory for trusted publish

steps:
- uses: actions/download-artifact@v4
with:
name: distribution
path: dist
- uses: pypa/gh-action-pypi-publish@v1.9.0
with:
verbose: true
7 changes: 2 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# setuptools-scm
version.py
test.ipynb

# Sphinx automatic generation of API
docs/_api/
Expand Down Expand Up @@ -132,7 +131,7 @@ Temporary Items
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
.idea/

# AWS User-specific
.idea/**/aws.xml

Expand Down Expand Up @@ -200,7 +199,7 @@ fabric.properties

# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
.idea/

### PyCharm Patch ###
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721

Expand Down Expand Up @@ -470,5 +469,3 @@ $RECYCLE.BIN/
*.lnk

# End of https://www.toptal.com/developers/gitignore/api/python,jupyternotebooks,vim,visualstudiocode,pycharm,emacs,linux,macos,windows
test.ipynb
*.sh
7 changes: 7 additions & 0 deletions .pre-commit-config-cruft.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
repos:
- repo: https://github.com/cruft/cruft
rev: 2.15.0
hooks:
- id: cruft
entry: cruft update -y
additional_dependencies: [toml]
37 changes: 25 additions & 12 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,26 +1,39 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
rev: v4.6.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-json
- id: check-yaml
- id: check-toml
- id: check-added-large-files
- id: check-merge-conflict
- id: debug-statements
- repo: https://github.com/PyCQA/isort
rev: 5.12.0
hooks:
- id: isort
- repo: https://github.com/psf/black
rev: 22.10.0
hooks:
- id: black
- id: mixed-line-ending
- repo: https://github.com/keewis/blackdoc
rev: v0.3.8
rev: v0.3.9
hooks:
- id: blackdoc
additional_dependencies: [black==22.3.0]
additional_dependencies: [black==23.11.0]
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.5.2
hooks:
- id: ruff
args: [--fix, --show-fixes]
- id: ruff-format
- repo: https://github.com/executablebooks/mdformat
rev: 0.7.16
rev: 0.7.17
hooks:
- id: mdformat
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: v2.14.0
hooks:
- id: pretty-format-yaml
args: [--autofix, --preserve-quotes]
- id: pretty-format-toml
args: [--autofix]
- repo: https://github.com/gitleaks/gitleaks
rev: v8.18.4
hooks:
- id: gitleaks
12 changes: 12 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
FROM continuumio/miniconda3

WORKDIR /src/cads-mars-server

COPY environment.yml /src/cads-mars-server/

RUN conda install -c conda-forge gcc python=3.11 \
&& conda env update -n base -f environment.yml

COPY . /src/cads-mars-server

RUN pip install --no-deps -e .
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [yyyy] [name of copyright owner]
Copyright 2024, European Union.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down
19 changes: 19 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
PROJECT := cads_mars_server
CONDA := conda
CONDAFLAGS :=
COV_REPORT := html

default: qa unit-tests type-check
Expand All @@ -12,4 +14,21 @@ unit-tests:
type-check:
python -m mypy .

conda-env-update:
$(CONDA) install -y -c conda-forge conda-merge
$(CONDA) run conda-merge environment.yml ci/environment-ci.yml > ci/combined-environment-ci.yml
$(CONDA) env update $(CONDAFLAGS) -f ci/combined-environment-ci.yml

docker-build:
docker build -t $(PROJECT) .

docker-run:
docker run --rm -ti -v $(PWD):/srv $(PROJECT)

template-update:
pre-commit run --all-files cruft -c .pre-commit-config-cruft.yaml

docs-build:
cd docs && rm -fr _api && make clean && make html

# DO NOT EDIT ABOVE THIS LINE, ADD COMMANDS BELOW
Loading

0 comments on commit 536810b

Please sign in to comment.