diff --git a/.gitignore b/.gitignore index a09c4eb..e8ce187 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -.config-mapper.yml +.env +.DS_STORE build -.DS_Store -.env \ No newline at end of file +dist/ +.config-mapper.yml \ No newline at end of file diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 0000000..14fd815 --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,29 @@ +before: + hooks: + - go mod tidy +builds: + - env: + - CGO_ENABLED=0 + goos: + - linux + - windows + - darwin +archives: + - replacements: + darwin: Darwin + linux: Linux + windows: Windows + 386: i386 + amd64: x86_64 +gitea_urls: + api: https://gitea.antoine-langlois.net/api/v1 + download: https://gitea.antoine-langlois.net +release: + gitea: + owner: DataHearth + name: config-mapper + mode: append +checksum: + name_template: "checksums.txt" +snapshot: + name_template: "{{ incpatch .Version }}-next" diff --git a/justfile b/justfile new file mode 100644 index 0000000..f1656bf --- /dev/null +++ b/justfile @@ -0,0 +1,12 @@ +set shell := ["zsh", "-uc"] +set dotenv-load + +default: + @just --list + +publish version: + git-chglog --next-tag {{version}} --output CHANGELOG.md + git add CHANGELOG.md && git commit -m "chore: update CHANGELOG {{version}}" + git tag -a {{version}} -m "{{version}}" + git push --follow-tags + goreleaser release --rm-dist --release-notes <(git-chglog -t .chglog/RELEASE_CHANGELOG.tpl.md) \ No newline at end of file diff --git a/release.py b/release.py deleted file mode 100644 index 2c5f249..0000000 --- a/release.py +++ /dev/null @@ -1,192 +0,0 @@ -import enum -import os -import sys -import re -import subprocess -from typing import Any, Dict -import requests - -GITEA_API = "https://gitea.antoine-langlois.net/api/v1/repos/DataHearth/config-mapper" -NTR = "\033[0m" # * Neutral -INF = "\033[0;34m" # * Blue (info) -WRN = "\033[1;33m" # * Yellow (warning) -ERR = "\033[1;31m" # * Red (error) -version_regex = re.compile(r"Version: \"v\d*.\d*.\d*\"") - - -class LogLevel(enum.Enum): - INFO = "INFO" - WARNING = "WARNING" - ERROR = "ERROR" - - -def log(msg: str, level: LogLevel = LogLevel.INFO): - color_lvl = ( - INF - if level == LogLevel.INFO - else WRN - if level == LogLevel.WARNING - else ERR - if level == LogLevel.ERROR - else INF - ) - print(f"{color_lvl}{level.value}{NTR} {msg}") - - -if __name__ == "__main__": - release = input("Enter a release version (vX.Y.Z): ") - - log("updating release version in files") - with open("cmd/cli.go") as f: - data = version_regex.sub(f'Version: "{release}"', f.read()) - - with open("cmd/cli.go", "w") as f: - f.write(data) - - res = subprocess.run( - ["git-chglog", "--next-tag", release, "--output", "CHANGELOG.md"], - stderr=subprocess.PIPE, - stdout=subprocess.DEVNULL, - ) - if res.returncode != 0: - log( - f'failed to generate changelog: {res.stderr.decode("UTF-8")}', - LogLevel.ERROR, - ) - sys.exit(1) - - log("commit & push changes") - res = subprocess.run( - args=f"git add . && git commit -m {release}", - stderr=subprocess.PIPE, - stdout=subprocess.DEVNULL, - shell=True, - ) - if res.returncode != 0: - log( - f'failed to commit changes: {res.stderr.decode("UTF-8")}', - LogLevel.ERROR, - ) - sys.exit(1) - res = subprocess.run( - args=f"git tag -a {release} -m {release} && git push --follow-tags", - stderr=subprocess.PIPE, - stdout=subprocess.DEVNULL, - shell=True, - ) - if res.returncode != 0: - log( - f'failed to tag and push changes: {res.stderr.decode("UTF-8")}', - LogLevel.ERROR, - ) - sys.exit(1) - - log("building Linux binary") - res = subprocess.run( - args=["go", "build", "-o", "build/x86-x64_linux_config-mapper"], - env=os.environ | {"GOOS": "linux"}, - stderr=subprocess.PIPE, - stdout=subprocess.DEVNULL, - ) - if res.returncode != 0: - log( - f'failed to build linux binary: {res.stderr.decode("UTF-8")}', - LogLevel.ERROR, - ) - sys.exit(1) - - log("building Darwin binary") - res = subprocess.run( - args=["go", "build", "-o", "build/x86-x64_darwin_config-mapper"], - env=os.environ | {"GOOS": "darwin"}, - stderr=subprocess.PIPE, - stdout=subprocess.DEVNULL, - ) - if res.returncode != 0: - log( - f'failed to build darwin binary: {res.stderr.decode("UTF-8")}', - LogLevel.ERROR, - ) - sys.exit(1) - - log("creating gitea release") - api_token: str - if len(sys.argv) > 1: - api_token = sys.argv.pop() - elif "GIT_CFG_MAPPER_TOKEN" in os.environ: - api_token = os.environ["GIT_CFG_MAPPER_TOKEN"] - else: - log("no gitea api token found in CLI params nor in ENV", LogLevel.ERROR) - sys.exit(1) - - res = subprocess.run( - args=["git-chglog", "-t", ".chglog/RELEASE_CHANGELOG.tpl.md"], - stderr=subprocess.PIPE, - stdout=subprocess.PIPE, - ) - if res.returncode != 0: - log( - f'failed to generate release body: {res.stderr.decode("UTF-8")}', - LogLevel.ERROR, - ) - sys.exit(1) - - response = requests.post( - url=f"{GITEA_API}/releases", - headers={"Authorization": f"token {api_token}"}, - json={ - "body": res.stdout.decode("UTF-8"), - "draft": False, - "prerelease": False, - "name": release, - "tag_name": release, - }, - ) - if not response.ok: - log( - f"failed to generate release (status {response.status_code}): {response.json()}", - LogLevel.ERROR, - ) - sys.exit(1) - - body: Dict[str, Any] = response.json() - release_id = body.get("id") - if not release_id: - log("no release id found in response body", LogLevel.ERROR) - sys.exit(1) - - response = requests.post( - url=f"{GITEA_API}/releases/{release_id}/assets", - headers={"Authorization": f"token {api_token}"}, - files={ - "attachment": ( - "x86-x64_linux_config-mapper", - open("build/x86-x64_linux_config-mapper", "rb"), - ) - }, - ) - - if not response.ok: - log( - f"failed to upload linux binary (status: {response.status_code}): {response.json()}", - LogLevel.ERROR, - ) - sys.exit(1) - response = requests.post( - url=f"{GITEA_API}/releases/{release_id}/assets", - headers={"Authorization": f"token {api_token}"}, - files={ - "attachment": ( - "x86-x64_darwin_config-mapper", - open("build/x86-x64_darwin_config-mapper", "rb"), - ) - }, - ) - if not response.ok: - log( - f"failed to upload darwin binary (status: {response.status_code}): {response.json()}", - LogLevel.ERROR, - ) - sys.exit(1) - - log("Done !")