-
Notifications
You must be signed in to change notification settings - Fork 44
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Devops: Add continuous deployment to CI workflow (#680)
The CI workflow is updated to trigger deployment of the package to PyPI when a new tag is pushed to the main repository and the pre-commit and tests have passed successfully. As a final check, the tag label is compared with the version defined in the `aiida_vasp/__init__.py` to make sure they match and prevent accidental incorrect tags.
- Loading branch information
Showing
2 changed files
with
75 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
# -*- coding: utf-8 -*- | ||
"""Validate that the version in the tag label matches the version of the package.""" | ||
import argparse | ||
import ast | ||
from pathlib import Path | ||
|
||
|
||
def get_version_from_module(content: str) -> str: | ||
"""Get the ``__version__`` attribute from a module. | ||
.. note:: This has been adapted from :mod:`setuptools.config`. | ||
""" | ||
try: | ||
module = ast.parse(content) | ||
except SyntaxError as exception: | ||
raise IOError('Unable to parse module.') from exception | ||
|
||
try: | ||
return next( | ||
ast.literal_eval(statement.value) for statement in module.body if isinstance(statement, ast.Assign) | ||
for target in statement.targets if isinstance(target, ast.Name) and target.id == '__version__' | ||
) | ||
except StopIteration as exception: | ||
raise IOError('Unable to find the `__version__` attribute in the module.') from exception | ||
|
||
|
||
if __name__ == '__main__': | ||
parser = argparse.ArgumentParser() | ||
parser.add_argument('GITHUB_REF', help='The GITHUB_REF environmental variable') | ||
args = parser.parse_args() | ||
TAG_PREFIX = 'refs/tags/v' | ||
assert args.GITHUB_REF.startswith(TAG_PREFIX), f'GITHUB_REF should start with "{TAG_PREFIX}": {args.GITHUB_REF}' | ||
tag_version = args.GITHUB_REF[len(TAG_PREFIX):] | ||
package_version = get_version_from_module(Path('aiida_vasp/__init__.py').read_text(encoding='utf-8')) | ||
error_message = f'The tag version `{tag_version}` is different from the package version `{package_version}`' | ||
assert tag_version == package_version, error_message |