Skip to content
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

chore(init): init from template #10

Merged
merged 9 commits into from
Aug 6, 2024
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
22 changes: 22 additions & 0 deletions .cruft.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"template": "https://github.com/elixir-cloud-aai/cookiecutter-python.git",
"commit": "74890427a2926b6943577df5f23001a65325f591",
"checkout": null,
"context": {
"cookiecutter": {
"author_name": "ELIXIR Cloud AAI",
"author_email": "[email protected]",
"development_status": "1 - Planning",
"short_description": "File handler utilizing TUS and MinIO with DRS-Filer integration.",
"project_name": "tus-storagehandler",
"project_slug": "tus_storagehandler",
"github_username": "elixir-cloud-aai",
"python_version": "3.11",
"add_script": "y",
"year": "2024",
"add_pypi_release_ci": "y",
"_template": "https://github.com/elixir-cloud-aai/cookiecutter-python.git"
}
},
"directory": null
}
49 changes: 49 additions & 0 deletions .github/ISSUE_TEMPLATE/general-purpose.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
Your issue may already be reported! Please search on the
[issue tracker][issue-tracker] before creating one.

## Expected behavior

<!--- If you're describing a bug, tell us what should happen -->

<!--- If you're suggesting a change/improvement, tell us how it should work -->

## Current behavior

<!--- If describing a bug, tell us what happens instead of the expected
behavior -->

<!--- If suggesting a change/improvement, explain the difference from current
behavior -->

## Possible solution

<!--- Not obligatory, but suggest a fix/reason for the bug, -->

<!--- or ideas how to implement the addition or change -->

## Context

<!--- How has this issue affected you? What are you trying to accomplish? -->

<!--- Providing context helps us come up with a solution that is most useful in
the real world -->

## Steps to reproduce (FOR BUGS)

<!--- Provide a link to a live example, or an unambiguous set of steps to -->

<!--- reproduce this bug. Include code to reproduce, if relevant -->

1.

## Your environment (FOR BUGS)

<!--- Include as many relevant details about the environment you experienced the
bug in -->

- Version used:
- Browser Name and version:
- Operating System and version (desktop or mobile):
- Link to your project:

[issue-tracker]: https://github.com/elixir-cloud-aai/tus-storagehandler/issues
92 changes: 92 additions & 0 deletions .github/actions/setup/poetry/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
---
name: Setup Python and Poetry Action
description: Configure system, Python, Poetry and deps and cache management.

inputs:
os:
default: ubuntu-latest
description: The operating system to use
python-version:
default: '3.11'
description: The version of Python to use
poetry-version:
default: '1.8.2'
description: The version of Poetry to install
poetry-install-options:
default: ''
description: Additional options to pass to poetry install
poetry-export-options:
default: ''
description: Options to pass to poetry export for hash generation for cache
invalidation

runs:
using: composite
steps:
- uses: 'actions/setup-python@v5'
id: setup-python
with:
python-version: '${{ inputs.python-version }}'

- name: Setup pipx environment Variables
id: pipx-env-setup
# pipx default home and bin dir are not writable by the cache action
# so override them here and add the bin dir to PATH for later steps.
# This also ensures the pipx cache only contains poetry
run: |
SEP="${{ !startsWith(runner.os, 'windows') && '/' || '\\' }}"
PIPX_CACHE="${{ github.workspace }}${SEP}pipx_cache"
echo "pipx-cache-path=${PIPX_CACHE}" >> $GITHUB_OUTPUT
echo "pipx-version=$(pipx --version)" >> $GITHUB_OUTPUT
echo "PIPX_HOME=${PIPX_CACHE}${SEP}home" >> $GITHUB_ENV
echo "PIPX_BIN_DIR=${PIPX_CACHE}${SEP}bin" >> $GITHUB_ENV
echo "PIPX_MAN_DIR=${PIPX_CACHE}${SEP}man" >> $GITHUB_ENV
echo "${PIPX_CACHE}${SEP}bin" >> $GITHUB_PATH
shell: bash

- name: Pipx cache
id: pipx-cache
uses: actions/cache@v4
with:
path: ${{ steps.pipx-env-setup.outputs.pipx-cache-path }}
key: ${{ runner.os }}-python-
${{ steps.setup-python.outputs.python-version }}-
pipx-${{ steps.pipx-env-setup.outputs.pipx-version }}-
poetry-${{ inputs.poetry-version }}

- name: Install poetry
if: steps.pipx-cache.outputs.cache-hit != 'true'
id: install-poetry
shell: bash
run: |
pipx install poetry \
--python "${{ steps.setup-python.outputs.python-path }}"

- name: Read poetry cache location
id: poetry-cache-location
shell: bash
run: |
echo "poetry-venv-location=$(poetry config virtualenvs.path)" \
>> $GITHUB_OUTPUT

- name: Generate hash only for required deps
run: |
poetry export ${{ inputs.poetry-export-options }} \
--format=requirements.txt --output=requirements.txt
echo "DEP_HASH=$(sha256sum requirements.txt | cut -d ' ' -f 1)" \
>> $GITHUB_ENV
shell: bash

- uses: actions/cache@v4
name: Poetry cache
with:
path: ${{ steps.poetry-cache-location.outputs.poetry-venv-location }}
key: ${{ runner.os }}-[python-
${{ steps.setup-python.outputs.python-version }}]-[
${{ env.DEP_HASH }}]-[${{ inputs.poetry-install-options }}]

- name: 'Poetry install'
if: steps.poetry-cache.outputs.cache-hit != 'true'
shell: bash
run: poetry install ${{ inputs.poetry-install-options }} --no-interaction
...
84 changes: 84 additions & 0 deletions .github/workflows/code_quality.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
---
name: Code quality

on:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
format:
name: Format
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up environment
uses: ./.github/actions/setup/poetry
with:
os: ${{ job.os }}
python-version: '3.11'
poetry-install-options: "--only=code_quality --no-root"
poetry-export-options: "--only=code_quality"

- name: Check code style
run: poetry run ruff format --check

lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up environment
uses: ./.github/actions/setup/poetry
with:
os: ${{ job.os }}
python-version: '3.11'
poetry-install-options: "--only=code_quality --no-root"
poetry-export-options: "--only=code_quality"

- name: Check code quality
run: poetry run ruff check .

spell-check:
name: Spell check
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up environment
uses: ./.github/actions/setup/poetry
with:
os: ${{ job.os }}
python-version: '3.11'
poetry-install-options: "--only=code_quality --no-root"
poetry-export-options: "--only=code_quality"

- name: Check spellings
run: poetry run typos .

type-check:
name: Type check
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up environment
uses: ./.github/actions/setup/poetry
with:
os: ${{ job.os }}
python-version: '3.11'
poetry-install-options: "--with=code_quality --with=types --no-root"
poetry-export-options: "--with=code_quality --with=types"

- name: Check types
run: poetry run mypy tus_storagehandler/
...
74 changes: 74 additions & 0 deletions .github/workflows/code_test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
---
name: Code test

on:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
integration-test:
name: Integration test
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up environment
uses: ./.github/actions/setup/poetry
with:
os: ${{ job.os }}
python-version: '3.11'
poetry-install-options: "--with=test"
poetry-export-options: "--with=test"

- name: Run tests and generate coverage as test_integration.xml
run: |
poetry run pytest \
--cov-report term \
--cov-report xml:test_integration.xml \
--cov=tests/test_integration

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: test_integration
files: ./test_integration.xml
fail_ci_if_error: true
verbose: true

unit-test:
name: Unit test
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up environment
uses: ./.github/actions/setup/poetry
with:
os: ${{ job.os }}
python-version: '3.11'
poetry-install-options: "--with=test"
poetry-export-options: "--with=test"

- name: Run tests and generate coverage as test_unit.xml
run: |
poetry run pytest \
--cov-report term \
--cov-report xml:test_unit.xml \
--cov=tests/test_unit

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: test_unit
files: ./test_unit.xml
fail_ci_if_error: true
verbose: true
...
48 changes: 48 additions & 0 deletions .github/workflows/docs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
name: Documentation check

on:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
check-api-docs:
runs-on: ubuntu-latest

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up environment
uses: ./.github/actions/setup/poetry
with:
os: ${{ job.os }}
python-version: '3.11'
poetry-install-options: "--with=docs --with=types --no-root"
poetry-export-options: "--with=docs --with=types"

- name: Generate API docs
run: |
poetry run sphinx-apidoc \
-o /tmp/docs/source/pages \
tus_storagehandler/

- name: Compare current docs with latest docs
id: check_docs_diff
run: |
shasum /tmp/docs/source/pages/* > /tmp/docs.sha
shasum docs/source/pages/* > docs/project_doc.sha
awk '{print $1}' /tmp/docs.sha > /tmp/docs_hashes.sha
awk '{print $1}' docs/project_doc.sha > docs/project_doc_hashes.sha
diff=$(diff /tmp/docs_hashes.sha docs/project_doc_hashes.sha) || true
if [[ -n "$diff" ]]; then
echo "::error::API documentation is out of date."
exit 1
else
echo "API documentation is up to date."
fi
...
Loading