diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..4190921 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,84 @@ +name: Release + +on: + push: + tags: + - 'v*' + +jobs: + build-binary: + strategy: + fail-fast: true + matrix: + os: [ubuntu-latest, macos-14, macos-13] + arch: [amd64, arm64] + include: + - os: ubuntu-latest + goos: linux + platform: linux + - os: macos-13 + goos: darwin + platform: darwin + - os: macos-14 + goos: darwin + platform: darwin + exclude: + - os: macos-14 + arch: amd64 + - os: macos-13 + arch: arm64 + name: Building fwatcher-${{ matrix.platform }}-${{ matrix.arch }} + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + + - uses: nxtcoder17/actions/setup-cache-go@v1 + with: + cache_key: "fwatcher" + working_directory: . + + # it will set 2 env variables + # IMAGE_TAG - image tag + # OVERRIDE_PUSHED_IMAGE - if true, it will not use pushed image tag + - uses: nxtcoder17/actions/generate-image-tag@v1 + id: tag_name + + - uses: nxtcoder17/actions/setup-nix-github@v1 + with: + flake_lock: "./flake.lock" + nix_develop_arguments: ".#default" + + - name: Build Binary + run: |+ + task build version=${IMAGE_TAG} GOOS={{matrix.goos}} GOARCH={{matrix.arch}} + + - name: Upload Artifact + uses: actions/upload-artifact@v3 + with: + name: fwatcher-${IMAGE_TAG}-${{ matrix.platform }}-${{ matrix.arch }} + path: bin/* + + release: + permissions: + contents: write + packages: write + + needs: build-binary + runs-on: ubuntu-latest + steps: + - name: Download all artifacts + uses: actions/download-artifact@v3 + with: + path: ${{ github.workspace }}/artifacts + + - uses: nxtcoder17/actions/generate-image-tag@v1 + id: tag_name + + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + files: ${{ github.workspace }}/artifacts/* + tag_name: ${{ steps.tag_name.outputs.TAG_NAME }} + prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/Taskfile.yml b/Taskfile.yml index 609d9f9..37a3100 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -11,12 +11,15 @@ tasks: dev:build: cmds: - - go build -o {{.Bin}} + - go build -ldflags "-s -w -X main.Version={{.version}}" -o {{.Bin}} build: + requires: + vars: + - version cmds: - - go build -o {{.Bin}} - - upx {{.Bin}} + - go build -ldflags "-s -w -X main.Version={{.version}}" -o ./bin/{{.Name}}-{{.GOOS}}-{{.GOARCH}} + - upx ./bin/{{.Name}}-{{.GOOS}}-{{.GOARCH}} example:http-server: cmds: diff --git a/flake.nix b/flake.nix index 3edc589..6080261 100644 --- a/flake.nix +++ b/flake.nix @@ -21,10 +21,11 @@ go_1_22 upx + go-task ]; shellHook = '' - # ''; + ''; }; } ); diff --git a/main.go b/main.go index 4aa2089..ae1dfb1 100644 --- a/main.go +++ b/main.go @@ -16,13 +16,16 @@ import ( "github.com/urfave/cli/v2" ) +var Version string + func main() { ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, os.Kill) defer stop() app := &cli.App{ - Name: "fwatcher", - Usage: "watches files in directories and operates on their changes", + Name: "fwatcher", + Usage: "watches files in directories and operates on their changes", + Version: Version, Flags: []cli.Flag{ &cli.BoolFlag{ Name: "debug", @@ -30,13 +33,6 @@ func main() { Required: false, Value: false, }, - &cli.BoolFlag{ - Name: "no-default-ignore", - Usage: "disables ignoring from default ignore list", - Required: false, - Aliases: []string{"I"}, - Value: false, - }, &cli.StringFlag{ Name: "command", Usage: "specifies command to execute on file change",