feat: init command, README, fix config creation, move cicd

- cmd_init.go: interactive setup wizard (gosleep-timer init)
- README.md: comprehensive documentation
- config/config.go: fix os.IsNotExist → errors.Is for wrapped err
- main.go: remove '(no TUI)' from run help
- cicd.yaml moved to .github/workflows/cicd.yaml
This commit is contained in:
2026-07-03 09:52:44 +02:00
parent 442ac9f580
commit d1cc207ce4
5 changed files with 466 additions and 2 deletions
+141
View File
@@ -0,0 +1,141 @@
name: ci
'on':
push:
branches:
- '**'
pull_request:
workflow_dispatch:
env:
REGISTRY: gcr.forust.xyz
IMAGE_NAME: forust/gosleep-timer
jobs:
lint-go:
runs-on: [self-hosted, linux, arch, homelab]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
- name: Lint with golangci-lint
uses: golangci/golangci-lint-action@v6
with:
version: latest
args: --config .golangci.yml --timeout 10m
- name: Run staticcheck
shell: bash
run: |
go install honnef.co/go/tools/cmd/staticcheck@latest
staticcheck ./...
- name: Run gosec
shell: bash
run: |
go install github.com/securego/gosec/v2/cmd/gosec@latest
gosec -no-fail -fmt=text ./...
- name: Run revive
shell: bash
run: |
go install github.com/mgechev/revive@latest
revive -config .revive.toml ./...
lint-yaml:
runs-on: [self-hosted, linux, arch, homelab]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Lint YAML syntax
shell: bash
run: |
docker run --rm \
-v "$PWD:/work" \
-w /work \
cytopia/yamllint:latest \
-c .yamllint .
build:
runs-on: [self-hosted, linux, arch, homelab]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
- name: Build
shell: bash
run: go build -ldflags="-s -w" -o gosleep-timer .
- name: Test
shell: bash
run: go test -v -race -coverprofile=cover.out ./...
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: gosleep-timer
path: gosleep-timer
publish:
needs: [lint-go, lint-yaml, build]
if: github.event_name != 'pull_request' && (github.ref_name == 'main' || github.ref_name == 'dev')
runs-on: [self-hosted, linux, arch, homelab]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
- name: Read project version
id: version
shell: bash
run: |
version="$(go version -m 2>/dev/null || date +%Y%m%d)"
echo "version=$version" >> "$GITHUB_OUTPUT"
- name: Log in to registry
shell: bash
run: |
echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login "${REGISTRY}" \
-u "${{ secrets.REGISTRY_USERNAME }}" \
--password-stdin
- name: Build and push image
shell: bash
run: |
image="${REGISTRY}/${IMAGE_NAME}"
tags=("latest" "${{ steps.version.outputs.version }}")
case "${GITHUB_REF_NAME}" in
main)
tags+=("main" "prod")
;;
dev)
tags+=("dev")
;;
esac
build_args=()
for tag in "${tags[@]}"; do
build_args+=(-t "${image}:${tag}")
done
docker build "${build_args[@]}" .
for tag in "${tags[@]}"; do
docker push "${image}:${tag}"
done