Skip to content
This repository has been archived by the owner on Mar 3, 2022. It is now read-only.

Commit

Permalink
New release workflow (#15)
Browse files Browse the repository at this point in the history
Add a GH Actions workflow that runs when a GitHub release is published.
It will run the new invoke task "update-version" with the tag name,
updating `metadata.json`'s `"version"` value with the correct version.
Then it will update the tag to the new commit and push it all to
`master`.
  • Loading branch information
CasperWA committed Oct 27, 2020
1 parent 4e0255b commit f1221b0
Show file tree
Hide file tree
Showing 6 changed files with 104 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,8 @@ updates:
schedule:
interval: daily
target-branch: master
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: daily
target-branch: master
4 changes: 4 additions & 0 deletions .github/static/release_tag_msg.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
TAG_NAME

This tag was created automatically through the GH Actions
"Release new version" workflow.
49 changes: 49 additions & 0 deletions .github/workflows/publish-on-pypi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Release new version

on:
release:
types:
- published

jobs:
release:
runs-on: ubuntu-latest
if: github.repository == 'aiidalab/aiidalab-optimade' && startsWith(github.ref, 'refs/tags/v')

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

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

- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
pip install -U setuptools
pip install -r requirements_dev.txt
- name: Update version
run: invoke update-version --version="${GITHUB_REF#refs/tags/}"

- name: Commit and update tag
run: |
git config --local user.email "aiidalab@materialscloud.org"
git config --local user.name "AiiDAlab Team"
git commit -m "Release ${GITHUB_REF#refs/tags/}" -a
TAG_MSG=.github/static/release_tag_msg.txt
sed -i "s|TAG_NAME|${GITHUB_REF#refs/tags/}|g" "${TAG_MSG}"
git tag -af -F "${TAG_MSG}" ${GITHUB_REF#refs/tags/}
- name: Push release commit and new tag
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
force: true
tags: true
branch: master
1 change: 1 addition & 0 deletions requirements_dev.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
invoke~=1.4
4 changes: 4 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
with open(TOP_DIR.joinpath("requirements.txt")) as handle:
REQUIREMENTS = handle.read()

with open(TOP_DIR.joinpath("requirements_dev.txt")) as handle:
DEV = handle.read()

setup(
name="aiidalab-optimade",
version=METADATA["version"],
Expand All @@ -21,4 +24,5 @@
url="https://github.com/aiidalab/aiidalab-optimade",
packages=find_packages(),
install_requires=REQUIREMENTS,
extras_require={"dev": DEV}
)
41 changes: 41 additions & 0 deletions tasks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from pathlib import Path
import re
import sys
from typing import Tuple

from invoke import task


TOP_DIR = Path(__file__).parent.resolve()


def update_file(filename: str, sub_line: Tuple[str, str], strip: str = None):
"""Utility function for tasks to read, update, and write files"""
with open(filename, "r") as handle:
lines = [
re.sub(sub_line[0], sub_line[1], line.rstrip(strip)) for line in handle
]

with open(filename, "w") as handle:
handle.write("\n".join(lines))
handle.write("\n")


@task
def update_version(_, version=""):
"""Update package version to given version"""
if version:
if version.startswith("v"):
version = version[1:]
if re.match(r"[0-9]+(\.[0-9]+){2}.*", version) is None:
sys.exit(
f"Error: Passed version ({version}) does adhere to SemVer standards."
)
else:
sys.exit("Error: version not supplied. It should adhere to SemVer standards.")

update_file(
TOP_DIR.joinpath("metadata.json"), (r'"version": ".+"', f'"version": "{version}"')
)

print(f"Bumped version to {version} !")

0 comments on commit f1221b0

Please sign in to comment.