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

Add publishing workflow inspired from the GEMDAT package. #23

Merged
merged 2 commits into from
Jun 10, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
72 changes: 72 additions & 0 deletions .github/workflows/publish.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Publish on PyPI

on:
release:
types: [published]
workflow_dispatch:


jobs:
fix_release_deps:
permissions: write-all
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.12'

- name: Install dependencies
run: |
python -m pip install --upgrade pip pip-tools setuptools

- name: Set configuration
run: |
git config --global user.name "${GITHUB_ACTOR}"
git config --global user.email "${GITHUB_ACTOR_ID}+${GITHUB_ACTOR}@users.noreply.github.com"

- name: Create requirements files
run: |
python tools/generate_requirements_txt.py
pip-compile -o requirements_full.txt pyproject.toml
git add requirements_full.txt requirements.txt
git commit -m "Updated requirements.txt files" || true

- name: Bump version to new tag
run: |
python -m pip install bump-my-version
bump-my-version bump --new-version $GITHUB_REF_NAME patch
git commit -am "Bump version to: $GITHUB_REF_NAME"

- name: Push back changes to main and tag
run: |
git tag --force $GITHUB_REF_NAME HEAD
git push --force --tags
git switch -C main
git push --set-upstream -f origin main

deploy:
needs: fix_release_deps
runs-on: ubuntu-latest
environment: release
permissions:
# IMPORTANT: this permission is mandatory for trusted publishing
id-token: write

steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.ref_name }}

- uses: actions/setup-python@v4
with:
python-version: '3.12'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install build setuptools>=61.2 wheel
python -m build --no-isolation

- name: Publish package
uses: pypa/gh-action-pypi-publish@release/v1
36 changes: 27 additions & 9 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,23 +27,41 @@ classifiers = [
keywords = ["exoplanet", "atmosphere"]
requires-python = '>=3.10'
dependencies = [
'matplotlib',
'natsort',
'netcdf4',
'numpy',
'pandas',
'scipy',
'seaborn',
'tomlkit',
'f90nml'
"matplotlib",
"natsort",
"netcdf4",
"numpy",
"pandas",
"scipy",
"seaborn",
"tomlkit",
"f90nml"
]

[project.urls]
homepage = "https://github.com/FormingWorlds/JANUS"

[project.optional-dependencies]
develop = [
"bump-my-version",
"pytest"
]
publishing = [
"wheel",
"build"
lsoucasse marked this conversation as resolved.
Show resolved Hide resolved
]

[tool.setuptools]
package-dir = {"janus" = "src/janus"}
include-package-data = true

[tool.pytest.ini_options]
testpaths = ["tests"]

[tool.bumpversion]
current_version = "24.04.04"

[[tool.bumpversion.files]]
filename = "pyproject.toml"
search = "version = \"{current_version}\""
replace = "version = \"{new_version}\""
19 changes: 19 additions & 0 deletions tools/generate_requirements_txt.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from __future__ import annotations

from pathlib import Path

import tomllib

this_script = Path(__file__)
root = this_script.parents[1]
pyproject = root / 'pyproject.toml'

with open(pyproject, 'rb') as f:
metadata = tomllib.load(f)
dependencies = metadata['project']['dependencies']

with open('requirements.txt', 'w') as f:
this_script_rel = this_script.relative_to(root)
f.write(f'# generated by {this_script_rel}\n')
f.write('\n'.join(dependencies))
f.write('\n')
Loading