From c876a1db69040e92166d111885494a8e0a95abba Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 10 Feb 2026 15:18:09 -0500 Subject: [PATCH 1/6] Use src/ layout --- {costools => src/costools}/__init__.py | 0 {costools => src/costools}/add_cos_s_region.py | 0 {costools => src/costools}/costoolsutil.py | 0 {costools => src/costools}/pars/splittag.cfg | 0 {costools => src/costools}/pars/splittag.cfgspc | 0 {costools => src/costools}/pars/timefilter.cfg | 0 {costools => src/costools}/pars/timefilter.cfgspc | 0 {costools => src/costools}/pars/x1dcorr.cfg | 0 {costools => src/costools}/pars/x1dcorr.cfgspc | 0 {costools => src/costools}/saamodel.py | 0 {costools => src/costools}/splittag.help | 0 {costools => src/costools}/splittag.py | 0 {costools => src/costools}/tests/__init__.py | 0 {costools => src/costools}/tests/test_noop.py | 0 {costools => src/costools}/timefilter.help | 0 {costools => src/costools}/timefilter.py | 0 {costools => src/costools}/x1dcorr.help | 0 {costools => src/costools}/x1dcorr.py | 0 18 files changed, 0 insertions(+), 0 deletions(-) rename {costools => src/costools}/__init__.py (100%) rename {costools => src/costools}/add_cos_s_region.py (100%) rename {costools => src/costools}/costoolsutil.py (100%) rename {costools => src/costools}/pars/splittag.cfg (100%) rename {costools => src/costools}/pars/splittag.cfgspc (100%) rename {costools => src/costools}/pars/timefilter.cfg (100%) rename {costools => src/costools}/pars/timefilter.cfgspc (100%) rename {costools => src/costools}/pars/x1dcorr.cfg (100%) rename {costools => src/costools}/pars/x1dcorr.cfgspc (100%) rename {costools => src/costools}/saamodel.py (100%) rename {costools => src/costools}/splittag.help (100%) rename {costools => src/costools}/splittag.py (100%) rename {costools => src/costools}/tests/__init__.py (100%) rename {costools => src/costools}/tests/test_noop.py (100%) rename {costools => src/costools}/timefilter.help (100%) rename {costools => src/costools}/timefilter.py (100%) rename {costools => src/costools}/x1dcorr.help (100%) rename {costools => src/costools}/x1dcorr.py (100%) diff --git a/costools/__init__.py b/src/costools/__init__.py similarity index 100% rename from costools/__init__.py rename to src/costools/__init__.py diff --git a/costools/add_cos_s_region.py b/src/costools/add_cos_s_region.py similarity index 100% rename from costools/add_cos_s_region.py rename to src/costools/add_cos_s_region.py diff --git a/costools/costoolsutil.py b/src/costools/costoolsutil.py similarity index 100% rename from costools/costoolsutil.py rename to src/costools/costoolsutil.py diff --git a/costools/pars/splittag.cfg b/src/costools/pars/splittag.cfg similarity index 100% rename from costools/pars/splittag.cfg rename to src/costools/pars/splittag.cfg diff --git a/costools/pars/splittag.cfgspc b/src/costools/pars/splittag.cfgspc similarity index 100% rename from costools/pars/splittag.cfgspc rename to src/costools/pars/splittag.cfgspc diff --git a/costools/pars/timefilter.cfg b/src/costools/pars/timefilter.cfg similarity index 100% rename from costools/pars/timefilter.cfg rename to src/costools/pars/timefilter.cfg diff --git a/costools/pars/timefilter.cfgspc b/src/costools/pars/timefilter.cfgspc similarity index 100% rename from costools/pars/timefilter.cfgspc rename to src/costools/pars/timefilter.cfgspc diff --git a/costools/pars/x1dcorr.cfg b/src/costools/pars/x1dcorr.cfg similarity index 100% rename from costools/pars/x1dcorr.cfg rename to src/costools/pars/x1dcorr.cfg diff --git a/costools/pars/x1dcorr.cfgspc b/src/costools/pars/x1dcorr.cfgspc similarity index 100% rename from costools/pars/x1dcorr.cfgspc rename to src/costools/pars/x1dcorr.cfgspc diff --git a/costools/saamodel.py b/src/costools/saamodel.py similarity index 100% rename from costools/saamodel.py rename to src/costools/saamodel.py diff --git a/costools/splittag.help b/src/costools/splittag.help similarity index 100% rename from costools/splittag.help rename to src/costools/splittag.help diff --git a/costools/splittag.py b/src/costools/splittag.py similarity index 100% rename from costools/splittag.py rename to src/costools/splittag.py diff --git a/costools/tests/__init__.py b/src/costools/tests/__init__.py similarity index 100% rename from costools/tests/__init__.py rename to src/costools/tests/__init__.py diff --git a/costools/tests/test_noop.py b/src/costools/tests/test_noop.py similarity index 100% rename from costools/tests/test_noop.py rename to src/costools/tests/test_noop.py diff --git a/costools/timefilter.help b/src/costools/timefilter.help similarity index 100% rename from costools/timefilter.help rename to src/costools/timefilter.help diff --git a/costools/timefilter.py b/src/costools/timefilter.py similarity index 100% rename from costools/timefilter.py rename to src/costools/timefilter.py diff --git a/costools/x1dcorr.help b/src/costools/x1dcorr.help similarity index 100% rename from costools/x1dcorr.help rename to src/costools/x1dcorr.help diff --git a/costools/x1dcorr.py b/src/costools/x1dcorr.py similarity index 100% rename from costools/x1dcorr.py rename to src/costools/x1dcorr.py From 8567d63c50c6d3a5dace2b512cf9f96d9465cb0b Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 10 Feb 2026 15:42:57 -0500 Subject: [PATCH 2/6] Exchange setup.py for pyproject.toml --- pyproject.toml | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ setup.py | 59 -------------------------------------------------- 2 files changed, 59 insertions(+), 59 deletions(-) delete mode 100755 setup.py diff --git a/pyproject.toml b/pyproject.toml index 113da5d..c6ec824 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,65 @@ +[project] +name = "costools" +description = "Tools for COS (Cosmic Origins Spectrograph)" +authors = [ + { name = "Warren Hack" }, + { name = "Nadezhda Dencheva" }, + { name = "Phil Hodge" }, +] +classifiers = [ + "Intended Audience :: Science/Research", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Scientific/Engineering :: Astronomy", + "Topic :: Software Development :: Libraries :: Python Modules", +] +dependencies = [ + "astropy", + "calcos", + "numpy", + "stsci.tools", +] +dynamic = [ + "version", +] +license = "BSD-3-Clause" +license-files = [ + "LICENSE.txt" +] +readme = "README.md" + +[project.optional-dependencies] +docs = [ + "sphinx", + "numpydoc", + "sphinx_rtd_theme>1.2.0", +] +test = [ + "pytest", + "pytest-cov", +] + +[project.scripts] +timefilter = "costools.timefilter:main" +add_cos_s_region = "costools.add_cos_s_region:call_main" + [build-system] requires = [ "setuptools>=38.2.5", "setuptools_scm", "wheel", ] +build-backend = "setuptools.build_meta" + +[tool.setuptools] +include-package-data = false + +[tool.setuptools.package-data] +costools = [ + "pars/*", + "*.help", +] + +[tool.setuptools_scm] +version_file = "src/costools/version.py" + diff --git a/setup.py b/setup.py deleted file mode 100755 index 0f06371..0000000 --- a/setup.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python -from setuptools import find_packages -from setuptools import setup - - -PACKAGENAME = 'costools' - -setup( - name=PACKAGENAME, - use_scm_version={'write_to': 'costools/version.py'}, - setup_requires=['setuptools_scm'], - install_requires=[ - 'astropy', - 'calcos', - 'numpy', - 'stsci.tools', - ], - extras_require={ - 'docs': [ - 'sphinx', - 'numpydoc', - 'sphinx_rtd_theme>1.2.0', - ], - 'test': [ - 'pytest', - 'pytest-cov', - ], - }, - packages=find_packages(), - package_data={ - PACKAGENAME: [ - 'pars/*', - '*.help', - ], - }, - entry_points={ - 'console_scripts': [ - 'timefilter = {0}.timefilter:main'.format(PACKAGENAME), - 'add_cos_s_region = {}.add_cos_s_region:call_main'.format(PACKAGENAME), - ], - }, - scripts=[ - 'costools/add_cos_s_region.py', - ], - author='Warren Hack, Nadezhda Dencheva, Phil Hodge', - description='Tools for COS (Cosmic Origins Spectrograph)', - long_description='README.md', - long_description_content_type='text/x-rst', - url='https://github.com/spacetelescope/costools', - license='BSD', - classifiers=[ - 'Intended Audience :: Science/Research', - 'License :: OSI Approved :: BSD License', - 'Operating System :: OS Independent', - 'Programming Language :: Python', - 'Topic :: Scientific/Engineering :: Astronomy', - 'Topic :: Software Development :: Libraries :: Python Modules', - ], -) From 64401abf99d5e18df9e6d73280130b2a97fa8a50 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 10 Feb 2026 15:19:30 -0500 Subject: [PATCH 3/6] Remove azure pipeline --- azure-pipelines.yml | 37 ------------------------------------- 1 file changed, 37 deletions(-) delete mode 100644 azure-pipelines.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index f66f204..0000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,37 +0,0 @@ -trigger: -- master - -pool: - vmImage: 'ubuntu-latest' -strategy: - matrix: - Python310: - python.version: '3.10' - Python311: - python.version: '3.11' - -steps: -- task: UsePythonVersion@0 - inputs: - versionSpec: '$(python.version)' - displayName: 'Python $(python.version)' - -- script: | - python -m pip install --upgrade pip - pip install -e ".[test]" - displayName: 'Install dependencies' - -- script: | - python -m pip freeze - displayName: 'Package listing' - -- script: | - python -m pip install pytest pytest-azurepipelines - pytest --cov=./ - coverage xml - curl -Os https://uploader.codecov.io/latest/linux/codecov - chmod +x codecov - ./codecov -t "$CODECOV" - displayName: 'pytest' - env: - CODECOV: $(codecov) From 9808de3091c5dadf1b6f06e5b4a611f3e4f66063 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 10 Feb 2026 15:27:02 -0500 Subject: [PATCH 4/6] Update .gitignore * Ignore coverage results * Ignore generated version.py --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index cb3a762..6edb919 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ docs/build dist __pycache__ pip-wheel-metadata +version.py +coverage.xml From d454645d7ba1a464aef76dc4ada04cb1ef2cb2bf Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 10 Feb 2026 15:40:48 -0500 Subject: [PATCH 5/6] Update workflows --- .github/dependabot.yml | 17 +++++++++++++++++ .github/workflows/publish-to-pypi.yml | 17 ++++++++--------- 2 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..b701ed3 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,17 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "github-actions" # See documentation for possible values + directory: ".github/workflows" # Location of package manifests + schedule: + interval: "monthly" + groups: + actions: + patterns: + - "*" + cooldown: + default-days: 7 diff --git a/.github/workflows/publish-to-pypi.yml b/.github/workflows/publish-to-pypi.yml index b0e8f86..16af96f 100644 --- a/.github/workflows/publish-to-pypi.yml +++ b/.github/workflows/publish-to-pypi.yml @@ -1,16 +1,15 @@ -name: Publish to PyPI +name: build on: release: - types: [released] + types: [ released ] + pull_request: + workflow_dispatch: jobs: - publish: - uses: spacetelescope/action-publish_to_pypi/.github/workflows/workflow.yml@master + build: + uses: OpenAstronomy/github-actions-workflows/.github/workflows/publish_pure_python.yml@99401c364fa51c9c507d3cd6d272049278ac0b2c # v2.4.0 with: - test: false - build_platform_wheels: false # Set to true if your package contains a C extension + upload_to_pypi: ${{ (github.event_name == 'release') && (github.event.action == 'released') }} secrets: - user: ${{ secrets.PYPI_USERNAME_STSCI_MAINTAINER }} - password: ${{ secrets.PYPI_PASSWORD_STSCI_MAINTAINER }} # WARNING: Do not hardcode secret values here! If you want to use a different user or password, you can override this secret by creating one with the same name in your Github repository settings. - test_password: ${{ secrets.PYPI_PASSWORD_STSCI_MAINTAINER_TEST }} + pypi_token: ${{ secrets.PYPI_PASSWORD_STSCI_MAINTAINER }} From a2ed935a65e0391ccec78d48e54dab8b0954a0f2 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 11 Feb 2026 09:40:00 -0500 Subject: [PATCH 6/6] Remove azure badge * Replace with build and test workflow status --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a7ef434..1cb851e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # COSTools -[![Build status](https://dev.azure.com/spacetelescope/costools/_apis/build/status/spacetelescope.costools?branchName=master)](https://dev.azure.com/spacetelescope/costools/_build/latest?definitionId=5&branchName=master) +[![build](https://github.com/spacetelescope/costools/actions/workflows/publish-to-pypi.yml/badge.svg?branch=master)](https://github.com/spacetelescope/costools/actions/workflows/publish-to-pypi.yml) +[![tests](https://github.com/spacetelescope/costools/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/spacetelescope/costools/actions/workflows/tests.yml) [![Codecov](https://codecov.io/gh/spacetelescope/costools/branch/master/graph/badge.svg)](https://codecov.io/gh/spacetelescope/costools) [![ReadtheDocs](https://readthedocs.org/projects/costools/badge/?version=latest)(http://costools.readthedocs.io/en/latest/) [![Powered by Astropy](http://img.shields.io/badge/powered%20by-AstroPy-orange.svg?style=flat)(http://www.astropy.org)