Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ben.boeckel/scriptconfig
  • utils/scriptconfig
2 results
Show changes
Commits on Source (4)
......@@ -18,7 +18,8 @@ stages:
variables:
# Change pip's cache directory to be inside the project directory
# since we can only cache local items.
PIP_CACHE_DIR: $CI_PROJECT_DIR/.cache/pip
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
except:
# Don't run the pipeline for new tags
- tags
......@@ -74,13 +75,22 @@ stages:
- echo "Installing helpers"
- pip install setuptools>=0.8 setuptools_scm wheel build -U
- pip install tomli pkginfo
- "export WHEEL_FPATH=$(python -c \"if 1:\n import pathlib\n dist_dpath =
pathlib.Path('dist')\n candidates = list(dist_dpath.glob('scriptconfig*.whl'))\n\
\ candidates += list(dist_dpath.glob('scriptconfig*.tar.gz'))\n fpath =
sorted(candidates)[-1]\n print(str(fpath).replace(chr(92), chr(47)))\n\")"
- "export MOD_VERSION=$(python -c \"if 1:\n from pkginfo import Wheel, SDist\n\
\ fpath = '$WHEEL_FPATH'\n cls = Wheel if fpath.endswith('.whl') else SDist\n\
\ print(cls(fpath).version)\n\")"
- |-
export WHEEL_FPATH=$(python -c "if 1:
import pathlib
dist_dpath = pathlib.Path('dist')
candidates = list(dist_dpath.glob('scriptconfig*.whl'))
candidates += list(dist_dpath.glob('scriptconfig*.tar.gz'))
fpath = sorted(candidates)[-1]
print(str(fpath).replace(chr(92), chr(47)))
")
- |-
export MOD_VERSION=$(python -c "if 1:
from pkginfo import Wheel, SDist
fpath = '$WHEEL_FPATH'
cls = Wheel if fpath.endswith('.whl') else SDist
print(cls(fpath).version)
")
- echo "WHEEL_FPATH=$WHEEL_FPATH"
- echo "INSTALL_EXTRAS=$INSTALL_EXTRAS"
- echo "MOD_VERSION=$MOD_VERSION"
......@@ -129,13 +139,22 @@ stages:
- echo "Installing helpers"
- pip install setuptools>=0.8 setuptools_scm wheel build -U
- pip install tomli pkginfo
- "export WHEEL_FPATH=$(python -c \"if 1:\n import pathlib\n dist_dpath =
pathlib.Path('dist')\n candidates = list(dist_dpath.glob('scriptconfig*.whl'))\n\
\ candidates += list(dist_dpath.glob('scriptconfig*.tar.gz'))\n fpath =
sorted(candidates)[-1]\n print(str(fpath).replace(chr(92), chr(47)))\n\")"
- "export MOD_VERSION=$(python -c \"if 1:\n from pkginfo import Wheel, SDist\n\
\ fpath = '$WHEEL_FPATH'\n cls = Wheel if fpath.endswith('.whl') else SDist\n\
\ print(cls(fpath).version)\n\")"
- |-
export WHEEL_FPATH=$(python -c "if 1:
import pathlib
dist_dpath = pathlib.Path('dist')
candidates = list(dist_dpath.glob('scriptconfig*.whl'))
candidates += list(dist_dpath.glob('scriptconfig*.tar.gz'))
fpath = sorted(candidates)[-1]
print(str(fpath).replace(chr(92), chr(47)))
")
- |-
export MOD_VERSION=$(python -c "if 1:
from pkginfo import Wheel, SDist
fpath = '$WHEEL_FPATH'
cls = Wheel if fpath.endswith('.whl') else SDist
print(cls(fpath).version)
")
- echo "WHEEL_FPATH=$WHEEL_FPATH"
- echo "INSTALL_EXTRAS=$INSTALL_EXTRAS"
- echo "MOD_VERSION=$MOD_VERSION"
......@@ -184,13 +203,22 @@ stages:
- echo "Installing helpers"
- pip install setuptools>=0.8 setuptools_scm wheel build -U
- pip install tomli pkginfo
- "export WHEEL_FPATH=$(python -c \"if 1:\n import pathlib\n dist_dpath =
pathlib.Path('dist')\n candidates = list(dist_dpath.glob('scriptconfig*.whl'))\n\
\ candidates += list(dist_dpath.glob('scriptconfig*.tar.gz'))\n fpath =
sorted(candidates)[-1]\n print(str(fpath).replace(chr(92), chr(47)))\n\")"
- "export MOD_VERSION=$(python -c \"if 1:\n from pkginfo import Wheel, SDist\n\
\ fpath = '$WHEEL_FPATH'\n cls = Wheel if fpath.endswith('.whl') else SDist\n\
\ print(cls(fpath).version)\n\")"
- |-
export WHEEL_FPATH=$(python -c "if 1:
import pathlib
dist_dpath = pathlib.Path('dist')
candidates = list(dist_dpath.glob('scriptconfig*.whl'))
candidates += list(dist_dpath.glob('scriptconfig*.tar.gz'))
fpath = sorted(candidates)[-1]
print(str(fpath).replace(chr(92), chr(47)))
")
- |-
export MOD_VERSION=$(python -c "if 1:
from pkginfo import Wheel, SDist
fpath = '$WHEEL_FPATH'
cls = Wheel if fpath.endswith('.whl') else SDist
print(cls(fpath).version)
")
- echo "WHEEL_FPATH=$WHEEL_FPATH"
- echo "INSTALL_EXTRAS=$INSTALL_EXTRAS"
- echo "MOD_VERSION=$MOD_VERSION"
......@@ -239,13 +267,22 @@ stages:
- echo "Installing helpers"
- pip install setuptools>=0.8 setuptools_scm wheel build -U
- pip install tomli pkginfo
- "export WHEEL_FPATH=$(python -c \"if 1:\n import pathlib\n dist_dpath =
pathlib.Path('dist')\n candidates = list(dist_dpath.glob('scriptconfig*.whl'))\n\
\ candidates += list(dist_dpath.glob('scriptconfig*.tar.gz'))\n fpath =
sorted(candidates)[-1]\n print(str(fpath).replace(chr(92), chr(47)))\n\")"
- "export MOD_VERSION=$(python -c \"if 1:\n from pkginfo import Wheel, SDist\n\
\ fpath = '$WHEEL_FPATH'\n cls = Wheel if fpath.endswith('.whl') else SDist\n\
\ print(cls(fpath).version)\n\")"
- |-
export WHEEL_FPATH=$(python -c "if 1:
import pathlib
dist_dpath = pathlib.Path('dist')
candidates = list(dist_dpath.glob('scriptconfig*.whl'))
candidates += list(dist_dpath.glob('scriptconfig*.tar.gz'))
fpath = sorted(candidates)[-1]
print(str(fpath).replace(chr(92), chr(47)))
")
- |-
export MOD_VERSION=$(python -c "if 1:
from pkginfo import Wheel, SDist
fpath = '$WHEEL_FPATH'
cls = Wheel if fpath.endswith('.whl') else SDist
print(cls(fpath).version)
")
- echo "WHEEL_FPATH=$WHEEL_FPATH"
- echo "INSTALL_EXTRAS=$INSTALL_EXTRAS"
- echo "MOD_VERSION=$MOD_VERSION"
......@@ -396,6 +433,29 @@ test/full-strict/cp312-linux-x86_64:
image: python:3.12
needs:
- build/cp312-linux-x86_64
build/cp313-linux-x86_64:
<<: *build_wheel_template
image: python:3.13
test/minimal-loose/cp313-linux-x86_64:
<<: *test_minimal-loose_template
image: python:3.13
needs:
- build/cp313-linux-x86_64
test/full-loose/cp313-linux-x86_64:
<<: *test_full-loose_template
image: python:3.13
needs:
- build/cp313-linux-x86_64
test/minimal-strict/cp313-linux-x86_64:
<<: *test_minimal-strict_template
image: python:3.13
needs:
- build/cp313-linux-x86_64
test/full-strict/cp313-linux-x86_64:
<<: *test_full-strict_template
image: python:3.13
needs:
- build/cp313-linux-x86_64
lint:
<<: *common_template
image: python:3.11
......@@ -437,14 +497,10 @@ gpgsign/wheels:
- openssl version
- $GPG_EXECUTABLE --list-keys
# note CI_KITWARE_SECRET is a protected variables only available on main and release branch
- CIS=$CI_SECRET openssl enc -aes-256-cbc -pbkdf2 -md SHA512 -pass env:CIS -d -a
-in dev/ci_public_gpg_key.pgp.enc | $GPG_EXECUTABLE --import
- CIS=$CI_SECRET openssl enc -aes-256-cbc -pbkdf2 -md SHA512 -pass env:CIS -d -a
-in dev/gpg_owner_trust.enc | $GPG_EXECUTABLE --import-ownertrust
- CIS=$CI_SECRET openssl enc -aes-256-cbc -pbkdf2 -md SHA512 -pass env:CIS -d -a
-in dev/ci_secret_gpg_subkeys.pgp.enc | $GPG_EXECUTABLE --import
- GPG_SIGN_CMD="$GPG_EXECUTABLE --batch --yes --detach-sign --armor --local-user
$GPG_KEYID"
- CIS=$CI_SECRET openssl enc -aes-256-cbc -pbkdf2 -md SHA512 -pass env:CIS -d -a -in dev/ci_public_gpg_key.pgp.enc | $GPG_EXECUTABLE --import
- CIS=$CI_SECRET openssl enc -aes-256-cbc -pbkdf2 -md SHA512 -pass env:CIS -d -a -in dev/gpg_owner_trust.enc | $GPG_EXECUTABLE --import-ownertrust
- CIS=$CI_SECRET openssl enc -aes-256-cbc -pbkdf2 -md SHA512 -pass env:CIS -d -a -in dev/ci_secret_gpg_subkeys.pgp.enc | $GPG_EXECUTABLE --import
- GPG_SIGN_CMD="$GPG_EXECUTABLE --batch --yes --detach-sign --armor --local-user $GPG_KEYID"
- |-
WHEEL_PATHS=(dist/*.whl dist/*.tar.gz)
WHEEL_PATHS_STR=$(printf '"%s" ' "${WHEEL_PATHS[@]}")
......@@ -473,6 +529,8 @@ gpgsign/wheels:
artifacts: true
- job: build/cp312-linux-x86_64
artifacts: true
- job: build/cp313-linux-x86_64
artifacts: true
deploy/wheels:
<<: *common_template
image: python:3.11
......@@ -497,7 +555,7 @@ deploy/wheels:
done
- |-
# Have the server git-tag the release and push the tags
export VERSION=$(python -c "import setup; print(setup.VERSION)")
export PROJECT_VERSION=$(python -c "import setup; print(setup.VERSION)")
# do sed twice to handle the case of https clone with and without a read token
URL_HOST=$(git remote get-url origin | sed -e 's|https\?://.*@||g' | sed -e 's|https\?://||g' | sed -e 's|git@||g' | sed -e 's|:|/|g')
source dev/secrets_configuration.sh
......@@ -509,7 +567,7 @@ deploy/wheels:
git config user.email "ci@gitlab.org.com"
git config user.name "Gitlab-CI"
fi
TAG_NAME="v${VERSION}"
TAG_NAME="v${PROJECT_VERSION}"
echo "TAG_NAME = $TAG_NAME"
if [ $(git tag -l "$TAG_NAME") ]; then
echo "Tag already exists"
......@@ -517,29 +575,80 @@ deploy/wheels:
# if we messed up we can delete the tag
# git push origin :refs/tags/$TAG_NAME
# and then tag with -f
git tag $TAG_NAME -m "tarball tag $VERSION"
git tag $TAG_NAME -m "tarball tag $PROJECT_VERSION"
git push --tags "https://git-push-token:${PUSH_TOKEN}@${URL_HOST}"
fi
- |-
# https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
echo "CI_PROJECT_URL=$CI_PROJECT_URL"
echo "CI_PROJECT_ID=$CI_PROJECT_ID"
echo "CI_PROJECT_NAME=$CI_PROJECT_NAME"
echo "CI_PROJECT_NAMESPACE=$CI_PROJECT_NAMESPACE"
echo "CI_API_V4_URL=$CI_API_V4_URL"
export PROJECT_VERSION=$(python -c "import setup; print(setup.VERSION)")
echo "PROJECT_VERSION=$PROJECT_VERSION"
# --header "PRIVATE-TOKEN: $PRIVATE_GITLAB_TOKEN" \
# If running on CI use CI authentication, otherwise
# assume we developer authentication available.
if [[ -z "$CI_JOB_TOKEN" ]]; then
AUTH_HEADER="PRIVATE-TOKEN: $PRIVATE_GITLAB_TOKEN"
else
AUTH_HEADER="JOB-TOKEN: $CI_JOB_TOKEN"
fi
# Loop over all of the assets in the wheelhouse (i.e. dist)
# and upload them to a package registry. We also store the
# links to the artifacts so we can attach them to a release
# page.
PACKAGE_ARTIFACT_ARRAY=()
for FPATH in "dist"/*; do
FNAME=$(basename $FPATH)
echo $FNAME
echo "Upload artifact: $FNAME"
PACKAGE_URL="$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/generic/$CI_PROJECT_NAME/$PROJECT_VERSION/$FNAME"
curl \
--header "JOB-TOKEN: $CI_JOB_TOKEN" \
--header "$AUTH_HEADER" \
--upload-file $FPATH \
"$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/generic/$CI_PROJECT_NAME/$PROJECT_VERSION/$FNAME"
"$PACKAGE_URL"
PACKAGE_ARTIFACT_ARRAY+=("$PACKAGE_URL")
done
- |-
export PROJECT_VERSION=$(python -c "import setup; print(setup.VERSION)")
echo "PROJECT_VERSION=$PROJECT_VERSION"
TAG_NAME="v$PROJECT_VERSION"
# Construct the JSON for assets to attach to the release
RELEASE_ASSET_JSON_LINKS=()
for ASSET_URL in "${PACKAGE_ARTIFACT_ARRAY[@]}"; do
ASSET_FNAME=$(basename $ASSET_URL)
RELEASE_ASSET_JSON_LINKS+=("{\"name\": \"$ASSET_FNAME\", \"url\": \"$ASSET_URL\"},")
done
_ASSET_LINK_JSON="${RELEASE_ASSET_JSON_LINKS[@]}"
# remove the trailing comma
ASSET_LINK_JSON=${_ASSET_LINK_JSON::-1}
echo "ASSET_LINK_JSON=$ASSET_LINK_JSON"
# Build json describing the release
RELEASE_DATA_JSON="{
\"name\": \"Version $PROJECT_VERSION\",
\"description\": \"Automated release of $CI_PROJECT_NAME version $PROJECT_VERSION\",
\"tag_name\": \"$TAG_NAME\",
\"assets\": {\"links\": [$ASSET_LINK_JSON]}
}"
echo "$RELEASE_DATA_JSON"
# If running on CI use CI authentication, otherwise
# assume we developer authentication available.
if [[ -z "${CI_JOB_TOKEN}" ]]; then
AUTH_HEADER="PRIVATE-TOKEN: $PRIVATE_GITLAB_TOKEN"
else
AUTH_HEADER="JOB-TOKEN: $CI_JOB_TOKEN"
fi
curl \
--header 'Content-Type: application/json' \
--header "$AUTH_HEADER" \
--data "$RELEASE_DATA_JSON" \
--request POST \
"$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases"
# end
\ No newline at end of file
......@@ -8,7 +8,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
### Added
New convenience arguments to `.cli`
* New convenience arguments to `.cli`
* Support for 3.13
## Version 0.8.0 - Released 2024-08-14
......
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
sMlZodHdv4+f2tQKghtGAg==
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
L+d8lRW7+geZGlt1VqzG7A==
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
JAXxc8vrFXkN9pYQupfYYQ==
......@@ -399,8 +399,8 @@ export_encrypted_code_signing_keys(){
# Export the main key instead (its better to have subkeys, but this is a lesser evil)
if [[ "$GPG_SIGN_SUBKEY" == "" ]]; then
# NOTE: if you get here this probably means your subkeys expired (and
# won't even be visible), so we probably should check for that here and
# thrown an error instead of using this hack, which likely won't work
# wont even be visible), so we probably should check for that here and
# thrown an error instead of using this hack, which likely wont work
# anyway.
GPG_SIGN_SUBKEY=$(gpg --list-keys --with-subkey-fingerprints "$GPG_IDENTIFIER" | grep "\[C\]" -A 1 | tail -n 1 | awk '{print $1}')
fi
......
......@@ -384,7 +384,7 @@ ls_array(){
# shellcheck disable=SC2206
array=($glob_pattern)
shopt -u nullglob # Turn off nullglob to make sure it doesn't interfere with anything later
# FIXME; for some reason this doesnt always work properly
# FIXME; for some reason this does not always work properly
# Copy the array into the dynamically named variable
# shellcheck disable=SC2086
readarray -t $arr_name < <(printf '%s\n' "${array[@]}")
......
......@@ -12,8 +12,7 @@ repo_name = "scriptconfig"
rel_mod_parent_dpath = "."
os = [ "osx", "linux", "win", "all",]
url = "https://gitlab.kitware.com/utils/scriptconfig"
min_python = 3.8
max_python = 3.12
min_python = "3.8"
version = "{mod_dpath}/__init__.py::__version__"
author = "Kitware Inc., Jon Crall"
author_email = "kitware@kitware.com, jon.crall@kitware.com"
......
# xdev availpkg numpy
# 1.19.2 is the tensorflow minimum
numpy>=1.26.0 ; python_version < '4.0' and python_version >= '3.12' # Python 3.12+
numpy>=2.1.0 ; python_version < '4.0' and python_version >= '3.13' # Python 3.13+
numpy>=1.26.0 ; python_version < '3.13' and python_version >= '3.12' # Python 3.12
numpy>=1.23.2 ; python_version < '3.12' and python_version >= '3.11' # Python 3.11
numpy>=1.21.6 ; python_version < '3.11' and python_version >= '3.10' # Python 3.10
numpy>=1.19.3 ; python_version < '3.10' and python_version >= '3.9' # Python 3.9
......
......@@ -70,7 +70,7 @@ def parse_requirements(fname="requirements.txt", versions=False):
Args:
fname (str): path to requirements file
versions (bool | str, default=False):
versions (bool | str):
If true include version specs.
If strict, then pin to the minimum version.
......@@ -106,7 +106,7 @@ def parse_requirements(fname="requirements.txt", versions=False):
info["package"] = line.split("#egg=")[1]
else:
if "--find-links" in line:
# setuptools doesnt seem to handle find links
# setuptools does not seem to handle find links
line = line.split("--find-links")[0]
if ";" in line:
pkgpart, platpart = line.split(";")
......@@ -159,7 +159,8 @@ def parse_requirements(fname="requirements.txt", versions=False):
if plat_deps is not None:
parts.append(";" + plat_deps)
item = "".join(parts)
yield item
if item:
yield item
packages = list(gen_packages_items())
return packages
......@@ -198,7 +199,6 @@ def parse_requirements(fname="requirements.txt", versions=False):
NAME = "scriptconfig"
INIT_PATH = "scriptconfig/__init__.py"
VERSION = parse_version(INIT_PATH)
if __name__ == "__main__":
setupkw = {}
......@@ -207,8 +207,11 @@ if __name__ == "__main__":
)
setupkw["extras_require"] = {
"all": parse_requirements("requirements.txt", versions="loose"),
"runtime": parse_requirements("requirements/runtime.txt", versions="loose"),
"tests": parse_requirements("requirements/tests.txt", versions="loose"),
"optional": parse_requirements("requirements/optional.txt", versions="loose"),
"docs": parse_requirements("requirements/docs.txt", versions="loose"),
"linting": parse_requirements("requirements/linting.txt", versions="loose"),
"all-strict": parse_requirements("requirements.txt", versions="strict"),
"runtime-strict": parse_requirements(
"requirements/runtime.txt", versions="strict"
......@@ -217,31 +220,37 @@ if __name__ == "__main__":
"optional-strict": parse_requirements(
"requirements/optional.txt", versions="strict"
),
"docs-strict": parse_requirements("requirements/docs.txt", versions="strict"),
"linting-strict": parse_requirements(
"requirements/linting.txt", versions="strict"
),
}
setupkw["name"] = NAME
setupkw["version"] = VERSION
setupkw["author"] = "Kitware Inc., Jon Crall"
setupkw["author_email"] = "kitware@kitware.com, jon.crall@kitware.com"
setupkw["url"] = "https://gitlab.kitware.com/utils/scriptconfig/"
setupkw["url"] = "https://gitlab.kitware.com/utils/scriptconfig"
setupkw["description"] = "Easy dict-based script configuration with CLI support"
setupkw["long_description"] = parse_description()
setupkw["long_description_content_type"] = "text/x-rst"
setupkw["license"] = "Apache 2"
setupkw["packages"] = find_packages(".")
setupkw["python_requires"] = ">=3.6"
setupkw["python_requires"] = ">=3.8"
setupkw["classifiers"] = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Utilities",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
]
setupkw["package_data"] = {"scriptconfig": ["py.typed", "*.pyi"]}
setupkw["package_data"] = {
"": ["requirements/*.txt"],
"scriptconfig": ["py.typed", "*.pyi"],
}
setup(**setupkw)