chore(process): add just and goreleaser

This commit is contained in:
DataHearth 2022-10-02 21:03:28 +02:00
parent 29e0be566c
commit 5682db8ac9
No known key found for this signature in database
GPG Key ID: E88FD356ACC5F3C4
4 changed files with 45 additions and 195 deletions

7
.gitignore vendored
View File

@ -1,4 +1,5 @@
.config-mapper.yml
.env
.DS_STORE
build
.DS_Store
.env
dist/
.config-mapper.yml

29
.goreleaser.yaml Normal file
View File

@ -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"

12
justfile Normal file
View File

@ -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)

View File

@ -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 !")