Skip to content

Commit

Permalink
chore: add scripts and workflows for release
Browse files Browse the repository at this point in the history
  • Loading branch information
iagapie committed Oct 31, 2024
1 parent 3ff66e7 commit 9cb1f5f
Show file tree
Hide file tree
Showing 6 changed files with 171 additions and 0 deletions.
14 changes: 14 additions & 0 deletions .github/workflows/commitlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: Lint Commit Messages
on: [pull_request]

jobs:
commit_lint:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Run linter
uses: wagoid/commitlint-github-action@v6
28 changes: 28 additions & 0 deletions .github/workflows/golangci-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: golangci-lint

on:
push:
tags:
- v*
branches:
- main
pull_request:

jobs:
golangci_lint:
name: Golang-CI (lint)
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5 # action page: <https://github.com/actions/setup-go>
with:
go-version: '1.23'

- name: Run linter
uses: golangci/golangci-lint-action@v6
with:
version: v1.60
args: -v --build-tags=race --timeout=5m
16 changes: 16 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Releases

on:
push:
tags:
- 'v*'

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4

- name: Create Release
uses: ncipollo/release-action@v1
21 changes: 21 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
ALL_GO_MOD_DIRS := $(shell find . -type f -name 'go.mod' -exec dirname {} \; | sort)

test:
set -e; for dir in $(ALL_GO_MOD_DIRS); do \
echo "go test in $${dir}"; \
(cd "$${dir}" && \
go test && \
go vet); \
done

go_mod_tidy:
set -e; for dir in $(ALL_GO_MOD_DIRS); do \
echo "go mod tidy in $${dir}"; \
(cd "$${dir}" && \
go get -u ./... && \
go mod tidy); \
done

fmt:
gofmt -w -s ./
goimports -w -local github.com/gowool/theme ./
57 changes: 57 additions & 0 deletions scripts/release.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/bin/bash

set -e

help() {
cat <<- EOF
Usage: TAG=tag $0
Updates version in go.mod files and pushes a new branch to GitHub.
VARIABLES:
TAG git tag, for example, v1.0.0
EOF
exit 0
}

if [ -z "$TAG" ]
then
printf "TAG is required\n\n"
help
fi

TAG_REGEX="^v(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(\\-[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?(\\+[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?$"
if ! [[ "${TAG}" =~ ${TAG_REGEX} ]]; then
printf "TAG is not valid: %s\n\n" "${TAG}"
exit 1
fi

TAG_FOUND=$(git tag --list "${TAG}")
if [[ ${TAG_FOUND} = ${TAG} ]] ; then
printf "tag %s already exists\n\n" "${TAG}"
exit 1
fi

if ! git diff --quiet
then
printf "working tree is not clean\n\n"
git status
exit 1
fi

git checkout main
make go_mod_tidy

PACKAGE_DIRS=$(find . -mindepth 2 -type f -name 'go.mod' -exec dirname {} \; \
| sed 's/^\.\///' \
| sort)

for dir in $PACKAGE_DIRS
do
sed -i '' "s@gowool/theme\([^ ]*\) v.*@gowool/theme\1 ${TAG}@" "${dir}/go.mod"
done

git checkout -b "release/${TAG}" main
git add -u
git commit -m "chore: release $TAG (release.sh)"
git push origin "release/${TAG}"
35 changes: 35 additions & 0 deletions scripts/tag.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/bin/bash

set -e

help() {
cat <<- EOF
Usage: TAG=tag $0
Creates git tags for public Go packages.
VARIABLES:
TAG git tag, for example, v1.0.0
EOF
exit 0
}

if [ -z "$TAG" ]
then
printf "TAG env var is required\n\n";
help
fi

PACKAGE_DIRS=$(find . -mindepth 2 -type f -name 'go.mod' -exec dirname {} \; \
| sed 's/^\.\///' \
| sort)

git tag "${TAG}"
git push origin "${TAG}"

for dir in $PACKAGE_DIRS
do
printf "tagging %s/%s\n" "${dir}" "${TAG}"
git tag "${dir}/${TAG}"
git push origin "${dir}/${TAG}"
done

0 comments on commit 9cb1f5f

Please sign in to comment.