Skip to content

Commit

Permalink
🔧 Devops: Add CD GitHub Action
Browse files Browse the repository at this point in the history
  • Loading branch information
mbercx committed Dec 20, 2023
1 parent fcfd545 commit 7696919
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 0 deletions.
46 changes: 46 additions & 0 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: cd

on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+*'

jobs:

validate-release-tag:

if: github.repository == 'aiidateam/aiida-submission-controller'
runs-on: ubuntu-latest

steps:
- name: Checkout source
uses: actions/checkout@v2

- name: Set up Python 3.11
uses: actions/setup-python@v2
with:
python-version: '3.11'

- name: Validate the tag version against the package version
run: python .github/workflows/validate_release_tag.py $GITHUB_REF

publish:

name: Publish to PyPI
needs: [validate-release-tag]
runs-on: ubuntu-latest

steps:
- name: Checkout source
uses: actions/checkout@v2

- name: Set up Python 3.11
uses: actions/setup-python@v2
with:
python-version: '3.11'

- name: Install flit
run: pip install flit~=3.8

- name: Build and publish
run: flit publish
40 changes: 40 additions & 0 deletions .github/workflows/validate_release_tag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# -*- 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 OSError("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 OSError("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()
assert args.GITHUB_REF.startswith("refs/tags/v"), f'GITHUB_REF should start with "refs/tags/v": {args.GITHUB_REF}'
tag_version = args.GITHUB_REF[11:]
package_version = get_version_from_module(
Path("aiida_submission_controller/__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

0 comments on commit 7696919

Please sign in to comment.