automation

This commit is contained in:
Felipe M 2024-11-24 08:56:35 +01:00
parent 1a809a1184
commit 3bdc5c63fb
Signed by: fmartingr
GPG key ID: CCFBC5637D4000A8
6 changed files with 254 additions and 0 deletions

3
.gitignore vendored
View file

@ -14,6 +14,7 @@
# Output of the go coverage tool, specifically when used with LiteIDE # Output of the go coverage tool, specifically when used with LiteIDE
*.out *.out
coverage.html
# Dependency directories (remove the comment below to include it) # Dependency directories (remove the comment below to include it)
# vendor/ # vendor/
@ -25,3 +26,5 @@ go.work.sum
# env file # env file
.env .env
# Dist
dist/

140
.goreleaser.yml Normal file
View file

@ -0,0 +1,140 @@
version: 2
gitea_urls:
api: https://git.nakama.town/api/v1
download: https://git.nakama.town
before:
hooks:
- go mod tidy
git:
ignore_tags:
- "{{ if not .IsNightly }}*-rc*{{ end }}"
builds:
- binary: smtp2shoutrrr
main: ./cmd/smtp2shoutrrr
env:
- CGO_ENABLED=0
- GIN_MODE=release
tags:
- netgo
- osusergo
goos:
- linux
- windows
- darwin
goarch:
- amd64
- arm
- arm64
goarm:
- "7"
ignore:
- goos: darwin
goarch: arm
- goos: windows
goarch: arm
- goos: windows
goarch: arm64
archives:
- id: smtp2shoutrrr
name_template: >-
{{ .ProjectName }}_
{{- if eq .Os "darwin" }}Darwin{{- else if eq .Os "linux" }}Linux{{- else if eq .Os "windows" }}Windows{{- else }}{{ .Os }}{{ end }}_
{{- if eq .Arch "amd64" }}x86_64{{- else if eq .Arch "arm64" }}aarch64{{- else }}{{ .Arch }}{{ end }}_{{ .Version }}
format_overrides:
- goos: windows
format: zip
dockers:
- image_templates:
- &amd64_image "git.nakama.town/fmartingr/smtp2shoutrrr:{{ .Version }}-amd64"
use: buildx
dockerfile: &dockerfile Containerfile
goos: linux
goarch: amd64
build_flag_templates:
- "--pull"
- "--platform=linux/amd64"
- image_templates:
- &arm64_image "git.nakama.town/fmartingr/smtp2shoutrrr:{{ .Version }}-arm64"
use: buildx
dockerfile: *dockerfile
goos: linux
goarch: arm64
build_flag_templates:
- "--pull"
- "--platform=linux/arm64"
# - image_templates:
# - &armv7_image "git.nakama.town/fmartingr/smtp2shoutrrr:{{ .Version }}-armv7"
# use: buildx
# dockerfile: *dockerfile
# goos: linux
# goarch: arm
# goarm: "7"
# build_flag_templates:
# - "--pull"
# - "--platform=linux/arm/v7"
docker_manifests:
- name_template: "git.nakama.town/fmartingr/smtp2shoutrrr:{{ .Version }}"
image_templates:
- *amd64_image
- *arm64_image
# - *armv7_image
# - name_template: "git.nakama.town/fmartingr/smtp2shoutrrr:latest"
# image_templates:
# - *amd64_image
# - *arm64_image
# - *armv7_image
upx:
- enabled: true
ids:
- smtp2shoutrrr
goos: [linux, darwin]
goarch: [amd64, arm, arm64]
goarm: ["7"]
checksum:
name_template: 'checksums.txt'
snapshot:
version_template: "{{ incpatch .Version }}-next"
changelog:
sort: asc
groups:
- title: Features
regexp: '^.*?feat(\([[:word:]]+\))??!?:.+$'
order: 0
- title: "Fixes"
regexp: '^.*?fix(\([[:word:]]+\))??!?:.+$'
order: 1
- title: "Performance"
regexp: '^.*?perf(\([[:word:]]+\))??!?:.+$'
order: 2
- title: API
regexp: '^.*?api(\([[:word:]]+\))??!?:.+$'
order: 3
- title: Documentation
regexp: '^.*?docs(\([[:word:]]+\))??!?:.+$'
order: 4
- title: "Tests"
regexp: '^.*?test(\([[:word:]]+\))??!?:.+$'
order: 5
- title: CI and Delivery
regexp: '^.*?ci(\([[:word:]]+\))??!?:.+$'
order: 6
- title: Others
order: 999
filters:
exclude:
- "^deps:"
- "^chore\\(deps\\):"
release:
prerelease: auto

15
.woodpecker/release.yml Normal file
View file

@ -0,0 +1,15 @@
when:
- event: tag
branch: main
steps:
- name: Release
image: goreleaser/goreleaser:latest
environment:
GITEA_TOKEN:
from_secret: GITEA_TOKEN
DOCKER_HOST: unix:///var/run/docker.sock
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
commands:
- goreleaser release --clean

4
Containerfile Normal file
View file

@ -0,0 +1,4 @@
FROM scratch
COPY /smtp2shoutrrr /usr/bin/smtp2shoutrrr
COPY --from=builder /usr/bin/smtp2shoutrrr /usr/bin/smtp2shoutrrr
ENTRYPOINT ["/usr/bin/smtp2shoutrrr"]

92
Makefile Normal file
View file

@ -0,0 +1,92 @@
PROJECT_NAME := smtp2shoutrrr
SOURCE_FILES ?=./...
TEST_OPTIONS ?= -v -failfast -race -bench=. -benchtime=100000x -cover -coverprofile=coverage.out
TEST_TIMEOUT ?=1m
CLEAN_OPTIONS ?=-modcache -testcache
CGO_ENABLED := 0
BUILDS_PATH := ./dist
FROM_MAKEFILE := y
CONTAINER_RUNTIME := podman
CONTAINERFILE_NAME := Containerfile
CONTAINER_ALPINE_VERSION := 3.20
CONTAINER_SOURCE_URL := "https://git.nakama.town/fmartingr/${PROJECT_NAME}"
CONTAINER_MAINTAINER := "Felipe Martin <me@fmartingr.com>"
CONTAINER_BIN_NAME := ${PROJECT_NAME}
BUILDX_PLATFORMS := linux/amd64,linux/arm64,linux/arm/v7
export PROJECT_NAME
export FROM_MAKEFILE
export CGO_ENABLED
export SOURCE_FILES
export TEST_OPTIONS
export TEST_TIMEOUT
export BUILDS_PATH
export CONTAINER_RUNTIME
export CONTAINERFILE_NAME
export CONTAINER_ALPINE_VERSION
export CONTAINER_SOURCE_URL
export CONTAINER_MAINTAINER
export CONTAINER_BIN_NAME
export BUILDX_PLATFORMS
.PHONY: all
all: help
# this is godly
# https://news.ycombinator.com/item?id=11939200
.PHONY: help
help: ### this screen. Keep it first target to be default
ifeq ($(UNAME), Linux)
@grep -P '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | \
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
else
@# this is not tested, but prepared in advance for you, Mac drivers
@awk -F ':.*###' '$$0 ~ FS {printf "%15s%s\n", $$1 ":", $$2}' \
$(MAKEFILE_LIST) | grep -v '@awk' | sort
endif
.PHONY: clean
clean: ### clean test cache, build files
$(info: Make: Clean)
@rm -rf ${BUILDS_PATH}
@go clean ${CLEAN_OPTIONS}
@-docker buildx rm ${PROJECT_NAME}_builder
.PHONY: build
build: clean ### builds the project for the setup os/arch combinations
$(info: Make: Build)
@goreleaser --clean --snapshot
.PHONY: quick-run
quick-run: ### Executes the project using golang
CGO_ENABLED=${CGO_ENABLED} go run ./cmd/${PROJECT_NAME}/*.go
.PHONY: run
run: ### Executes the project build locally
@make build
${BUILDS_PATH}/${PROJECT_NAME}
.PHONY: format
format: ### Executes the formatting pipeline on the project
$(info: Make: Format)
@bash scripts/format.sh
.PHONY: lint
lint: ### Check the project for errors
$(info: Make: Lint)
@bash scripts/lint.sh
.PHONY: test
test: ### Runs the test suite
@bash scripts/test.sh