diff options
Diffstat (limited to 'templates')
-rw-r--r-- | templates/go/.github/workflows/release.yaml | 25 | ||||
-rw-r--r-- | templates/go/.github/workflows/update.yaml (renamed from templates/go/.github/workflows/update.yml) | 0 | ||||
-rw-r--r-- | templates/go/.gitignore | 4 | ||||
-rw-r--r-- | templates/go/.goreleaser.yaml | 28 | ||||
-rw-r--r-- | templates/go/Makefile | 19 | ||||
-rw-r--r-- | templates/go/README.md | 3 | ||||
-rw-r--r-- | templates/go/flake.nix | 132 | ||||
-rw-r--r-- | templates/go/go.mod | 2 | ||||
-rw-r--r-- | templates/go/main.go | 4 |
9 files changed, 147 insertions, 70 deletions
diff --git a/templates/go/.github/workflows/release.yaml b/templates/go/.github/workflows/release.yaml new file mode 100644 index 0000000..a828de1 --- /dev/null +++ b/templates/go/.github/workflows/release.yaml @@ -0,0 +1,25 @@ +name: release +on: + push: + tags: + - "*" +permissions: + contents: write +jobs: + goreleaser: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - run: git fetch --force --tags + - uses: actions/setup-go@v4 + with: + go-version: stable + - uses: goreleaser/goreleaser-action@v5 + with: + distribution: goreleaser + version: latest + args: release --clean + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/templates/go/.github/workflows/update.yml b/templates/go/.github/workflows/update.yaml index 2723a6f..2723a6f 100644 --- a/templates/go/.github/workflows/update.yml +++ b/templates/go/.github/workflows/update.yaml diff --git a/templates/go/.gitignore b/templates/go/.gitignore new file mode 100644 index 0000000..efec39a --- /dev/null +++ b/templates/go/.gitignore @@ -0,0 +1,4 @@ +/result +/.pre-commit-config.yaml +/bin/ +/dist/ diff --git a/templates/go/.goreleaser.yaml b/templates/go/.goreleaser.yaml new file mode 100644 index 0000000..d907209 --- /dev/null +++ b/templates/go/.goreleaser.yaml @@ -0,0 +1,28 @@ +project_name: fixproject +builds: + - id: default + main: . + binary: fixproject + flags: + - -tags + - -trimpath + env: + - CGO_ENABLED=0 + ldflags: + - -s -w -X main.Version={{.Version}} -X main.BuildDate={{ .CommitDate }} + goos: + - darwin + - linux + goarch: + - amd64 + - arm64 +archives: + - id: default + builds: + - default + name_template: "fixproject_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}" + format: tar.gz +checksum: + name_template: "checksums.txt" +snapshot: + name_template: "{{ incpatch .Version }}-next" diff --git a/templates/go/Makefile b/templates/go/Makefile new file mode 100644 index 0000000..34fe639 --- /dev/null +++ b/templates/go/Makefile @@ -0,0 +1,19 @@ +.PHONY: build run clean + +BUILD_DIR=bin +PROGRAM_FILE=fixproject +VERSION=$(shell git describe --tag --always) +BUILD_DATE ?= $(shell TZ=UTC0 git show -s --format=%cd --date=format-local:'%Y-%m-%dT%H:%M:%SZ' HEAD) + +build: + @go build \ + -o ${BUILD_DIR}/${PROGRAM_FILE} \ + -ldflags "-X main.Version=${VERSION} -X main.BuildDate=${BUILD_DATE}" \ + -trimpath main.go + +run: build + @./${BUILD_DIR}/${PROGRAM_FILE} + +clean: + @go clean + @rm -rf ${BUILD_DIR}/${PROGRAM_FILE} diff --git a/templates/go/README.md b/templates/go/README.md index e69de29..f27d226 100644 --- a/templates/go/README.md +++ b/templates/go/README.md @@ -0,0 +1,3 @@ +New shiny project + +TODO: replace all instances of `fixproject` with the name of the project. diff --git a/templates/go/flake.nix b/templates/go/flake.nix index ce7fa0d..4746a98 100644 --- a/templates/go/flake.nix +++ b/templates/go/flake.nix @@ -1,83 +1,77 @@ { - description = "Go project template"; - inputs = { - futils.url = "github:numtide/flake-utils"; - nixpkgs.url = "github:NixOS/nixpkgs"; - pre-commit-hooks = { - url = "github:cachix/pre-commit-hooks.nix"; - inputs = { - flake-utils.follows = "futils"; - nixpkgs.follows = "nixpkgs"; - }; - }; + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + flake-parts = { url = "github:hercules-ci/flake-parts"; inputs.nixpkgs-lib.follows = "nixpkgs"; }; + treefmt-nix = { url = "github:numtide/treefmt-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; + devshell.url = "github:numtide/devshell"; + pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix"; }; - outputs = - { self - , futils - , nixpkgs - , pre-commit-hooks - }: - futils.lib.eachDefaultSystem - (system: - let - pkgs = import nixpkgs { - inherit system; - }; - pname = "project-name"; - version = "0.0.1"; - tools = with pkgs; [ - # https://github.com/golang/vscode-go/blob/master/docs/tools.md - delve - golangci-lint - gopls - ]; - in - rec { - # `nix build` - packages."${pname}" = pkgs.buildGoModule { - inherit pname version; - src = ./.; - vendorSha256 = null; - }; - defaultPackage = packages."${pname}"; + outputs = inputs: + inputs.flake-parts.lib.mkFlake { inherit inputs; } { + systems = [ "x86_64-linux" "aarch64-darwin" ]; + imports = [ + inputs.treefmt-nix.flakeModule + inputs.pre-commit-hooks.flakeModule + inputs.devshell.flakeModule + ]; - # `nix run` - apps = { - "${pname}" = futils.lib.mkApp { - drv = packages."${pname}"; - exePath = "/bin/changeme"; + perSystem = { pkgs, config, ... }: + let + src = ./.; + package = { + # Replace the following throws with strings with the appropriate values + name = throw "package.name: missing value"; + version = throw "package.name: missing value"; + vendorHash = null; }; - default = apps."${pname}"; - }; + in + { + packages = { + ${package.name} = pkgs.buildGoModule { + pname = package.name; + inherit (package) + version + vendorHash; + inherit src; + }; + default = config.packages.${package.name}; + }; + + formatter = pkgs.treefmt; - # `nix develop` - checks = { - pre-commit = pre-commit-hooks.lib.${system}.run { - src = ./.; - hooks = { - nixpkgs-fmt.enable = true; - yamllint.enable = true; - govet.enable = true; - gotest.enable = true; - gofmt.enable = true; - staticcheck.enable = true; + devshells.default = { + commands = [ + { + name = "build"; + category = "dev"; + help = "Build the binary"; + command = "make"; + } + ]; + packages = with pkgs; [ + go_1_21 + gopls + golangci-lint + ]; + devshell.startup = { + pre-commit.text = config.pre-commit.installationScript; }; + }; + + treefmt = { + projectRootFile = "go.mod"; + programs.gofmt.enable = true; + programs.nixpkgs-fmt.enable = true; + }; + + pre-commit = { settings = { - yamllint.relaxed = true; + hooks = { + treefmt.enable = true; + }; }; }; }; - - devShell = pkgs.mkShell { - buildInputs = with pkgs; [ go ] ++ tools; - inherit (self.checks.${system}.pre-commit) shellHook; - }; - }) - // { - overlay = _: prev: { - XXX = self.defaultPackage.${prev.system}; - }; }; } diff --git a/templates/go/go.mod b/templates/go/go.mod index aa1e0fb..d85760b 100644 --- a/templates/go/go.mod +++ b/templates/go/go.mod @@ -1,3 +1,3 @@ -module github.com/fcuny/changeme +module github.com/fcuny/fixproject go 1.21 diff --git a/templates/go/main.go b/templates/go/main.go index 7776ec8..b5b1c7a 100644 --- a/templates/go/main.go +++ b/templates/go/main.go @@ -2,6 +2,10 @@ package main import "fmt" +var ( + Version, BuildDate string +) + func main() { fmt.Println("hello world!") } |