From 50622750653979fc50f89e4a9cbcf370e27e0bf5 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Wed, 9 Oct 2019 19:40:48 +0900 Subject: [PATCH 01/56] Update dependencies --- go.mod | 8 ++++---- go.sum | 8 ++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 475470c..c048216 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,8 @@ go 1.13 require ( github.com/joho/godotenv v1.3.0 - github.com/mattn/go-colorable v0.1.2 - github.com/mattn/go-isatty v0.0.9 // indirect - golang.org/x/sys v0.0.0-20190907184412-d223b2b6db03 - gopkg.in/yaml.v2 v2.2.2 + github.com/mattn/go-colorable v0.1.4 + github.com/mattn/go-isatty v0.0.10 // indirect + golang.org/x/sys v0.0.0-20191008105621-543471e840be + gopkg.in/yaml.v2 v2.2.4 ) diff --git a/go.sum b/go.sum index d16d61b..fad0ba5 100644 --- a/go.sum +++ b/go.sum @@ -4,20 +4,28 @@ github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRU github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= golang.org/x/sys v0.0.0-20180925112736-b09afc3d579e h1:LSlw/Dbj0MkNvPYAAkGinYmGliq+aqS7eKPYlE4oWC4= golang.org/x/sys v0.0.0-20180925112736-b09afc3d579e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190907184412-d223b2b6db03 h1:b3JiLYVaG9kHjTcOQIoUh978YMCO7oVTQQBLudU47zY= golang.org/x/sys v0.0.0-20190907184412-d223b2b6db03/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From 1cf39322270c02d2e93bee76b48e41876d474965 Mon Sep 17 00:00:00 2001 From: mattn Date: Wed, 9 Oct 2019 21:52:56 +0900 Subject: [PATCH 02/56] Update and rename main.yml to release.yml --- .github/workflows/release.yml | 66 +++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..f8ca1fb --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,66 @@ +name: release + +on: + create: + tags: + - v*.*.* + +jobs: + release: + runs-on: ubuntu-18.04 + steps: + - + name: Checkout + uses: actions/checkout@v1 + - + name: Prepare + id: prepare + run: | + TAG=${GITHUB_REF#refs/tags/} + MINOR=${TAG%.*} + MAJOR=${MINOR%.*} + echo ::set-output name=tag_name::${TAG} + echo ::set-output name=minor_tag::${MINOR} + echo ::set-output name=major_tag::${MAJOR} + echo ::set-output name=major_exists::$(git show-ref origin/releases/${MAJOR}) + - + name: Set up Git + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config user.name "${GITHUB_ACTOR}" + git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" + git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git + - + name: Checkout releases/${{ steps.prepare.outputs.major_tag }} branch + run: | + git checkout -B releases/${{ steps.prepare.outputs.major_tag }} + if [ -n "${{ steps.prepare.outputs.major_exists }}" ]; then + git branch --set-upstream-to=origin/releases/${{ steps.prepare.outputs.major_tag }} releases/${{ steps.prepare.outputs.major_tag }} + fi + - + name: NPM production deps + run: | + rm -rf node_modules + sed -i '/node_modules/d' .gitignore + npm install --production + - + name: Commit and push changes + run: | + git add --all + git status --short -uno + git commit -m 'Release ${{ steps.prepare.outputs.tag_name }}' + git show --stat-count=10 HEAD + git push -f origin releases/${{ steps.prepare.outputs.major_tag }} + - + name: Update ${{ steps.prepare.outputs.minor_tag }} tag + run: | + git push origin :refs/tags/${{ steps.prepare.outputs.minor_tag }} + git tag -fa ${{ steps.prepare.outputs.minor_tag }} -m "Release ${{ steps.prepare.outputs.tag_name }}" + git push origin ${{ steps.prepare.outputs.minor_tag }} + - + name: Update ${{ steps.prepare.outputs.major_tag }} tag + run: | + git push origin :refs/tags/${{ steps.prepare.outputs.major_tag }} + git tag -fa ${{ steps.prepare.outputs.major_tag }} -m "Release ${{ steps.prepare.outputs.tag_name }}" + git push origin ${{ steps.prepare.outputs.major_tag }} From bfa320fd02ece3bc51999dac91a49e71278f8af6 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Wed, 9 Oct 2019 22:17:02 +0900 Subject: [PATCH 03/56] Add go.yml --- .github/workflows/go.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/workflows/go.yml diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 0000000..2b48492 --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,20 @@ +name: Go +on: [push] +jobs: + + test: + name: Test + runs-on: ubuntu-latest + steps: + + - name: Set up Go + uses: actions/setup-go@v1 + with: + go-version: 1.13 + id: go + + - name: Check out code into the Go module directory + uses: actions/checkout@v1 + + - name: Test + run: go test -v -race ./... From 188b5269ea838d267ede622171a733668ad2bc66 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Wed, 9 Oct 2019 22:20:16 +0900 Subject: [PATCH 04/56] Fix race --- goreman.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/goreman.go b/goreman.go index 2915295..f923124 100644 --- a/goreman.go +++ b/goreman.go @@ -62,6 +62,8 @@ type procInfo struct { waitErr error } +var mu sync.Mutex + // process informations named with proc. var procs []*procInfo @@ -128,6 +130,9 @@ func readProcfile(cfg *config) error { if err != nil { return err } + mu.Lock() + defer mu.Unlock() + procs = []*procInfo{} index := 0 for _, line := range strings.Split(string(content), "\n") { From cdb7937879f5308e89addd00aa79cce849d06259 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Wed, 9 Oct 2019 22:24:33 +0900 Subject: [PATCH 05/56] Fix race --- goreman_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/goreman_test.go b/goreman_test.go index 67427b8..8b919f6 100644 --- a/goreman_test.go +++ b/goreman_test.go @@ -149,7 +149,10 @@ web4: sleep 10 goremanStopped <- struct{}{} }() for { - if procs == nil { + mu.Lock() + isEmpty := procs == nil + mu.Unlock() + if isEmpty { time.Sleep(5 * time.Millisecond) continue } From f38178a3502846f2a36379904de2ab5b11d23f1b Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Wed, 9 Oct 2019 22:27:17 +0900 Subject: [PATCH 06/56] Fix race --- goreman.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/goreman.go b/goreman.go index f923124..b5b1920 100644 --- a/goreman.go +++ b/goreman.go @@ -200,6 +200,10 @@ func check(cfg *config) error { if err != nil { return err } + + mu.Lock() + defer mu.Unlock() + keys := make([]string, len(procs)) i := 0 for _, proc := range procs { @@ -212,6 +216,9 @@ func check(cfg *config) error { } func findProc(name string) *procInfo { + mu.Lock() + defer mu.Unlock() + for _, proc := range procs { if proc.name == name { return proc @@ -226,6 +233,9 @@ func start(ctx context.Context, sig <-chan os.Signal, cfg *config) error { if err != nil { return err } + mu.Lock() + defer mu.Unlock() + ctx, cancel := context.WithCancel(ctx) // Cancel the RPC server when procs have returned/errored, cancel the // context anyway in case of early return. From d54911204f6dad09ba502f8f76d7e0515f7a0a7b Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Wed, 9 Oct 2019 22:45:47 +0900 Subject: [PATCH 07/56] Fix race --- goreman.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/goreman.go b/goreman.go index b5b1920..e0ad86c 100644 --- a/goreman.go +++ b/goreman.go @@ -216,9 +216,6 @@ func check(cfg *config) error { } func findProc(name string) *procInfo { - mu.Lock() - defer mu.Unlock() - for _, proc := range procs { if proc.name == name { return proc @@ -233,8 +230,6 @@ func start(ctx context.Context, sig <-chan os.Signal, cfg *config) error { if err != nil { return err } - mu.Lock() - defer mu.Unlock() ctx, cancel := context.WithCancel(ctx) // Cancel the RPC server when procs have returned/errored, cancel the @@ -253,7 +248,9 @@ func start(ctx context.Context, sig <-chan os.Signal, cfg *config) error { maxProcNameLength = len(v) } } + mu.Lock() procs = tmp + mu.Unlock() } godotenv.Load() rpcChan := make(chan *rpcMessage, 10) From b18ead517a977097fa899da9cc6342b69c24c355 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Wed, 9 Oct 2019 22:48:59 +0900 Subject: [PATCH 08/56] Fix race --- goreman.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/goreman.go b/goreman.go index e0ad86c..f0fde6e 100644 --- a/goreman.go +++ b/goreman.go @@ -216,6 +216,9 @@ func check(cfg *config) error { } func findProc(name string) *procInfo { + mu.Lock() + defer mu.Unlock() + for _, proc := range procs { if proc.name == name { return proc From c8c57617229d63d49859351ba405a476fa303702 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Wed, 9 Oct 2019 23:51:25 +0900 Subject: [PATCH 09/56] Add .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b883f1f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.exe From a0bb40540017c2c00def20921fbd56a2dee502dc Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Fri, 11 Oct 2019 14:22:53 +0900 Subject: [PATCH 10/56] Add .goreleaser.yml --- .goreleaser.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .goreleaser.yml diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 0000000..e5c65f4 --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,18 @@ +builds: + - binary: goreman + goos: + - windows + - darwin + - linux + goarch: + - amd64 + - 386 +archive: + format: zip + name_template: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}" + files: + - README.md +release: + github: + owner: mattn + name: goreman From 9b3f49d87addde46cffb7d9cd891b1e2b7bdd4cf Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Wed, 4 Dec 2019 15:48:52 +0900 Subject: [PATCH 11/56] Should be cap not len --- goreman.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/goreman.go b/goreman.go index f0fde6e..944a4c4 100644 --- a/goreman.go +++ b/goreman.go @@ -239,7 +239,7 @@ func start(ctx context.Context, sig <-chan os.Signal, cfg *config) error { // context anyway in case of early return. defer cancel() if len(cfg.Args) > 1 { - tmp := make([]*procInfo, len(cfg.Args[1:])) + tmp := make([]*procInfo, 0, len(cfg.Args[1:])) maxProcNameLength = 0 for _, v := range cfg.Args[1:] { proc := findProc(v) From da8aadf1d44e6c920a5065440b73e3bd553e6dcd Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Jan 2020 09:43:31 +0000 Subject: [PATCH 12/56] Add renovate.json --- renovate.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..f45d8f1 --- /dev/null +++ b/renovate.json @@ -0,0 +1,5 @@ +{ + "extends": [ + "config:base" + ] +} From c6c65ce39ec5c37a0bbf4ac01f0706816f7e26ca Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Jan 2020 10:01:19 +0000 Subject: [PATCH 13/56] Update golang.org/x/sys commit hash to 548cf77 --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index c048216..c4d0311 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,6 @@ require ( github.com/joho/godotenv v1.3.0 github.com/mattn/go-colorable v0.1.4 github.com/mattn/go-isatty v0.0.10 // indirect - golang.org/x/sys v0.0.0-20191008105621-543471e840be + golang.org/x/sys v0.0.0-20200107162124-548cf772de50 gopkg.in/yaml.v2 v2.2.4 ) diff --git a/go.sum b/go.sum index fad0ba5..5e8a0e9 100644 --- a/go.sum +++ b/go.sum @@ -21,6 +21,8 @@ golang.org/x/sys v0.0.0-20190907184412-d223b2b6db03 h1:b3JiLYVaG9kHjTcOQIoUh978Y golang.org/x/sys v0.0.0-20190907184412-d223b2b6db03/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200107162124-548cf772de50 h1:YvQ10rzcqWXLlJZ3XCUoO25savxmscf4+SC+ZqiCHhA= +golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= From 777985883261bb7a4ac7b8658f96fd78fc85e2c2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Jan 2020 10:14:29 +0000 Subject: [PATCH 14/56] Update module yaml to v2.2.7 --- go.mod | 2 +- go.sum | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index c4d0311..15ebfc5 100644 --- a/go.mod +++ b/go.mod @@ -7,5 +7,5 @@ require ( github.com/mattn/go-colorable v0.1.4 github.com/mattn/go-isatty v0.0.10 // indirect golang.org/x/sys v0.0.0-20200107162124-548cf772de50 - gopkg.in/yaml.v2 v2.2.4 + gopkg.in/yaml.v2 v2.2.7 ) diff --git a/go.sum b/go.sum index 5e8a0e9..d1009b6 100644 --- a/go.sum +++ b/go.sum @@ -31,3 +31,4 @@ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From b9eb332f676faa9a70a3df2186748919cdb06b9c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 16 Jan 2020 00:35:15 +0000 Subject: [PATCH 15/56] Update golang.org/x/sys commit hash to b775942 --- go.mod | 2 +- go.sum | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 15ebfc5..7fe7a99 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,6 @@ require ( github.com/joho/godotenv v1.3.0 github.com/mattn/go-colorable v0.1.4 github.com/mattn/go-isatty v0.0.10 // indirect - golang.org/x/sys v0.0.0-20200107162124-548cf772de50 + golang.org/x/sys v0.0.0-20200116001909-b77594299b42 gopkg.in/yaml.v2 v2.2.7 ) diff --git a/go.sum b/go.sum index d1009b6..4501d83 100644 --- a/go.sum +++ b/go.sum @@ -23,6 +23,8 @@ golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9Y golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200107162124-548cf772de50 h1:YvQ10rzcqWXLlJZ3XCUoO25savxmscf4+SC+ZqiCHhA= golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= @@ -31,4 +33,5 @@ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo= gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From d6e3d85906c671cbdcd63a51daa3f05df68d79be Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 21 Jan 2020 09:43:34 +0000 Subject: [PATCH 16/56] Update golang.org/x/sys commit hash to 34d2753 --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 7fe7a99..da8328c 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,6 @@ require ( github.com/joho/godotenv v1.3.0 github.com/mattn/go-colorable v0.1.4 github.com/mattn/go-isatty v0.0.10 // indirect - golang.org/x/sys v0.0.0-20200116001909-b77594299b42 + golang.org/x/sys v0.0.0-20200121082415-34d275377bf9 gopkg.in/yaml.v2 v2.2.7 ) diff --git a/go.sum b/go.sum index 4501d83..4b61939 100644 --- a/go.sum +++ b/go.sum @@ -25,6 +25,8 @@ golang.org/x/sys v0.0.0-20200107162124-548cf772de50 h1:YvQ10rzcqWXLlJZ3XCUoO25sa golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200121082415-34d275377bf9 h1:N19i1HjUnR7TF7rMt8O4p3dLvqvmYyzB6ifMFmrbY50= +golang.org/x/sys v0.0.0-20200121082415-34d275377bf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= From 6f0e23ad0f5cc88533c16ca3ad923806ab98b25b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 24 Jan 2020 20:58:06 +0000 Subject: [PATCH 17/56] Update golang.org/x/sys commit hash to 9fbb57f --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index da8328c..e5a90ac 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,6 @@ require ( github.com/joho/godotenv v1.3.0 github.com/mattn/go-colorable v0.1.4 github.com/mattn/go-isatty v0.0.10 // indirect - golang.org/x/sys v0.0.0-20200121082415-34d275377bf9 + golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 gopkg.in/yaml.v2 v2.2.7 ) diff --git a/go.sum b/go.sum index 4b61939..b690259 100644 --- a/go.sum +++ b/go.sum @@ -27,6 +27,8 @@ golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtD golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200121082415-34d275377bf9 h1:N19i1HjUnR7TF7rMt8O4p3dLvqvmYyzB6ifMFmrbY50= golang.org/x/sys v0.0.0-20200121082415-34d275377bf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 h1:1/DFK4b7JH8DmkqhUk48onnSfrPzImPoVxuomtbT2nk= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= From a73992f9f896cb1b6f5509fd2391ad3238147357 Mon Sep 17 00:00:00 2001 From: mattn Date: Tue, 28 Jan 2020 19:43:07 +0900 Subject: [PATCH 18/56] Delete renovate.json --- renovate.json | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 renovate.json diff --git a/renovate.json b/renovate.json deleted file mode 100644 index f45d8f1..0000000 --- a/renovate.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": [ - "config:base" - ] -} From e28379af25b2e6565b1d907c5ec6ac8566b13fdd Mon Sep 17 00:00:00 2001 From: benjamin Date: Sat, 4 Jul 2020 10:44:14 +0800 Subject: [PATCH 19/56] fix issue 103: remove the last statement 'break' in each case clause from switch statement --- goreman.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/goreman.go b/goreman.go index 944a4c4..3059b5a 100644 --- a/goreman.go +++ b/goreman.go @@ -278,10 +278,8 @@ func main() { switch cmd { case "check": err = check(cfg) - break case "help": usage() - break case "run": if len(cfg.Args) >= 2 { cmd, args := cfg.Args[1], cfg.Args[2:] @@ -289,7 +287,6 @@ func main() { } else { usage() } - break case "export": if len(cfg.Args) == 3 { format, path := cfg.Args[1], cfg.Args[2] @@ -297,14 +294,11 @@ func main() { } else { usage() } - break case "start": c := notifyCh() err = start(context.Background(), c, cfg) - break case "version": fmt.Println(version) - break default: usage() } From b08788047a988cfad0c085290c31610225b7d7a2 Mon Sep 17 00:00:00 2001 From: benjamin Date: Sun, 5 Jul 2020 21:12:02 +0800 Subject: [PATCH 20/56] fix issue_106: added a design diagram for this project --- README.md | 9 +++++++++ images/design.png | Bin 0 -> 42399 bytes 2 files changed, 9 insertions(+) create mode 100644 images/design.png diff --git a/README.md b/README.md index ff4eca3..1140c10 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,15 @@ See `_example` directory MIT +## Design + +The main goroutine loads Procfile and starts each command in the file. Afterwards, it is driven by the following two kinds of events, and then take proper action against the managed processes. + +1. It receives a signal, which could be one of SIGINT,SIGTERM and SIGHUP; +2. It receives a RPC call, which is triggered by the command "goreman run COMMAND [PROCESS...]". + +![design](images/design.png) + ## Authors Yasuhiro Matsumoto (a.k.a mattn) diff --git a/images/design.png b/images/design.png new file mode 100644 index 0000000000000000000000000000000000000000..0069368180fa6815b8b1d29a8bafa71e5d8e1ff7 GIT binary patch literal 42399 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⪙2|U#jB=MA1LUl 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 Date: Fri, 21 Aug 2020 14:05:14 +0200 Subject: [PATCH 21/56] Fix version command by setting version on release The output of `goreman version` doesn't match the latest released version (according to the git tags). This changes the `version` in the code to be set dynamically by goreleaser when a new release is made. What do you think? Do you even still use goreleaser? --- .goreleaser.yml | 2 ++ goreman.go | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index e5c65f4..296b7cc 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -1,5 +1,7 @@ builds: - binary: goreman + ldflags: + - -X main.version={{.Version}} goos: - windows - darwin diff --git a/goreman.go b/goreman.go index 3059b5a..4a39001 100644 --- a/goreman.go +++ b/goreman.go @@ -19,7 +19,10 @@ import ( "gopkg.in/yaml.v2" ) -const version = "0.2.1" +// version is the git tag at the time of build and is used to denote the +// binary's current version. This value is supplied as an ldflag at compile +// time by goreleaser (see .goreleaser.yml). +var version = "dev" func usage() { fmt.Fprint(os.Stderr, `Tasks: From f25ba7f68796dd45720fe4770decc3557d04e7ca Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Fri, 21 Aug 2020 22:51:11 +0900 Subject: [PATCH 22/56] Update version --- .github/workflows/release.yml | 86 +++++++++++------------------------ goreman.go | 13 +++++- 2 files changed, 38 insertions(+), 61 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f8ca1fb..9fa7fa3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,66 +1,34 @@ -name: release +name: Release on: - create: + push: tags: - - v*.*.* + - 'v*' jobs: release: - runs-on: ubuntu-18.04 + name: Release + runs-on: ubuntu-latest steps: - - - name: Checkout - uses: actions/checkout@v1 - - - name: Prepare - id: prepare - run: | - TAG=${GITHUB_REF#refs/tags/} - MINOR=${TAG%.*} - MAJOR=${MINOR%.*} - echo ::set-output name=tag_name::${TAG} - echo ::set-output name=minor_tag::${MINOR} - echo ::set-output name=major_tag::${MAJOR} - echo ::set-output name=major_exists::$(git show-ref origin/releases/${MAJOR}) - - - name: Set up Git - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - git config user.name "${GITHUB_ACTOR}" - git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" - git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git - - - name: Checkout releases/${{ steps.prepare.outputs.major_tag }} branch - run: | - git checkout -B releases/${{ steps.prepare.outputs.major_tag }} - if [ -n "${{ steps.prepare.outputs.major_exists }}" ]; then - git branch --set-upstream-to=origin/releases/${{ steps.prepare.outputs.major_tag }} releases/${{ steps.prepare.outputs.major_tag }} - fi - - - name: NPM production deps - run: | - rm -rf node_modules - sed -i '/node_modules/d' .gitignore - npm install --production - - - name: Commit and push changes - run: | - git add --all - git status --short -uno - git commit -m 'Release ${{ steps.prepare.outputs.tag_name }}' - git show --stat-count=10 HEAD - git push -f origin releases/${{ steps.prepare.outputs.major_tag }} - - - name: Update ${{ steps.prepare.outputs.minor_tag }} tag - run: | - git push origin :refs/tags/${{ steps.prepare.outputs.minor_tag }} - git tag -fa ${{ steps.prepare.outputs.minor_tag }} -m "Release ${{ steps.prepare.outputs.tag_name }}" - git push origin ${{ steps.prepare.outputs.minor_tag }} - - - name: Update ${{ steps.prepare.outputs.major_tag }} tag - run: | - git push origin :refs/tags/${{ steps.prepare.outputs.major_tag }} - git tag -fa ${{ steps.prepare.outputs.major_tag }} -m "Release ${{ steps.prepare.outputs.tag_name }}" - git push origin ${{ steps.prepare.outputs.major_tag }} + - name: Checkout code + uses: actions/checkout@master + - name: Setup Go + uses: actions/setup-go@v1 + with: + go-version: 1.x + - name: Add $GOPATH/bin to $PATH + run: echo "::add-path::$(go env GOPATH)/bin" + - name: Cross build + run: make cross + - name: Create Release + id: create_release + uses: actions/create-release@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + - name: Upload + run: make upload + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/goreman.go b/goreman.go index 4a39001..39e8bd3 100644 --- a/goreman.go +++ b/goreman.go @@ -22,7 +22,11 @@ import ( // version is the git tag at the time of build and is used to denote the // binary's current version. This value is supplied as an ldflag at compile // time by goreleaser (see .goreleaser.yml). -var version = "dev" +const ( + name = "goreman" + version = "dev" + revision = "HEAD" +) func usage() { fmt.Fprint(os.Stderr, `Tasks: @@ -265,6 +269,11 @@ func start(ctx context.Context, sig <-chan os.Signal, cfg *config) error { return procsErr } +func showVersion() { + fmt.Fprintf(os.Stdout, "%s\n", version) + os.Exit(0) +} + func main() { var err error cfg := readConfig() @@ -301,7 +310,7 @@ func main() { c := notifyCh() err = start(context.Background(), c, cfg) case "version": - fmt.Println(version) + showVersion() default: usage() } From 494e085dd654ebf59d02448cc8af501104eb0a5c Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Fri, 21 Aug 2020 22:52:26 +0900 Subject: [PATCH 23/56] Bump --- goreman.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/goreman.go b/goreman.go index 39e8bd3..28e5ace 100644 --- a/goreman.go +++ b/goreman.go @@ -24,7 +24,7 @@ import ( // time by goreleaser (see .goreleaser.yml). const ( name = "goreman" - version = "dev" + version = "0.3.6" revision = "HEAD" ) From 69dd5b85e5f98eb172209753b5c73fa097b7ee1c Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Fri, 21 Aug 2020 22:52:40 +0900 Subject: [PATCH 24/56] Add Makefile --- Makefile | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e8544c1 --- /dev/null +++ b/Makefile @@ -0,0 +1,61 @@ +BIN := goreman +VERSION := $$(make -s show-version) +CURRENT_REVISION := $(shell git rev-parse --short HEAD) +BUILD_LDFLAGS := "-s -w -X main.revision=$(CURRENT_REVISION)" +GOBIN ?= $(shell go env GOPATH)/bin +export GO111MODULE=on + +.PHONY: all +all: clean build + +.PHONY: build +build: + go build -ldflags=$(BUILD_LDFLAGS) -o $(BIN) . + +.PHONY: install +install: + go install -ldflags=$(BUILD_LDFLAGS) . + +.PHONY: show-version +show-version: $(GOBIN)/gobump + @gobump show -r . + +$(GOBIN)/gobump: + @cd && go get github.com/x-motemen/gobump/cmd/gobump + +.PHONY: cross +cross: $(GOBIN)/goxz + goxz -n $(BIN) -pv=v$(VERSION) -build-ldflags=$(BUILD_LDFLAGS) . + +$(GOBIN)/goxz: + cd && go get github.com/Songmu/goxz/cmd/goxz + +.PHONY: test +test: build + go test -v ./... + +.PHONY: clean +clean: + rm -rf $(BIN) goxz + go clean + +.PHONY: bump +bump: $(GOBIN)/gobump +ifneq ($(shell git status --porcelain),) + $(error git workspace is dirty) +endif +ifneq ($(shell git rev-parse --abbrev-ref HEAD),master) + $(error current branch is not master) +endif + @gobump up -w . + git commit -am "bump up version to $(VERSION)" + git tag "v$(VERSION)" + git push origin master + git push origin "refs/tags/v$(VERSION)" + +.PHONY: upload +upload: $(GOBIN)/ghr + ghr "v$(VERSION)" goxz + +$(GOBIN)/ghr: + cd && go get github.com/tcnksm/ghr From 897c30117f2a5ae078bdcf14687727af01ae700b Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Fri, 21 Aug 2020 22:56:48 +0900 Subject: [PATCH 25/56] Add some files --- .goreleaser.yml | 20 -------------------- .travis.yml | 16 ---------------- appveyor.yml | 16 ---------------- wercker.yml | 45 --------------------------------------------- 4 files changed, 97 deletions(-) delete mode 100644 .goreleaser.yml delete mode 100644 .travis.yml delete mode 100644 appveyor.yml delete mode 100644 wercker.yml diff --git a/.goreleaser.yml b/.goreleaser.yml deleted file mode 100644 index 296b7cc..0000000 --- a/.goreleaser.yml +++ /dev/null @@ -1,20 +0,0 @@ -builds: - - binary: goreman - ldflags: - - -X main.version={{.Version}} - goos: - - windows - - darwin - - linux - goarch: - - amd64 - - 386 -archive: - format: zip - name_template: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}" - files: - - README.md -release: - github: - owner: mattn - name: goreman diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 65c6a6e..0000000 --- a/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -language: go -go_import_path: github.com/mattn/goreman - -install: - - echo 'nothing to do' - -script: - - go test -v -short ./... - -go: - - 1.13.x - - master - -cache: - directories: - - $GOPATH/pkg diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index b3573c9..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,16 +0,0 @@ -version: 0.0.{build} -clone_folder: c:\gopath\src\github.com\mattn\goreman -environment: - GOPATH: c:\gopath -install: - - set PATH=c:\go\bin;%GOPATH%\bin;%PATH%;C:\MinGW\bin - - rd c:\go /s /q - - appveyor DownloadFile https://storage.googleapis.com/golang/go1.13.windows-amd64.zip - - 7z x go1.13.windows-amd64.zip -oC:\ >nul - - go version - - go env -build_script: - - go get -d - - go build -test_script: - - go test -v -short ./... diff --git a/wercker.yml b/wercker.yml deleted file mode 100644 index 5cee759..0000000 --- a/wercker.yml +++ /dev/null @@ -1,45 +0,0 @@ -box: tcnksm/gox -build: - steps: - - setup-go-workspace - - script: - name: show environments - code: | - git version - go version - - script: - name: go get - code: | - go get -t ./... - - script: - name: go test - code: | - go test -v ./... -deploy: - steps: - - setup-go-workspace - - script: - name: go get - code: | - go get ./... - - wercker/gox: - os: darwin linux windows - arch: 386 amd64 - output: '{{.Dir}}_{{.OS}}_{{.Arch}}/{{.Dir}}' - dest: $WERCKER_OUTPUT_DIR/pkg - - tcnksm/zip: - input: $WERCKER_OUTPUT_DIR/pkg - output: $WERCKER_OUTPUT_DIR/dist - - script: - name: set release tag - code: | - if [ -n "$GOBUMP_NEW_VERSION" ]; then - export RELEASE_TAG="v$GOBUMP_NEW_VERSION" - fi - - tcnksm/ghr: - token: $GITHUB_TOKEN - input: $WERCKER_OUTPUT_DIR/dist - replace: true - version: $RELEASE_TAG - opt: --draft - From 29e405014c0287260257dc7b21298587229f42d2 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Fri, 21 Aug 2020 23:05:06 +0900 Subject: [PATCH 26/56] Bump --- goreman.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/goreman.go b/goreman.go index 28e5ace..f055fb6 100644 --- a/goreman.go +++ b/goreman.go @@ -24,7 +24,7 @@ import ( // time by goreleaser (see .goreleaser.yml). const ( name = "goreman" - version = "0.3.6" + version = "0.3.7" revision = "HEAD" ) From 83b8a731cb09a130dff4dae036729cd9d640c8f7 Mon Sep 17 00:00:00 2001 From: Bouke van der Bijl Date: Fri, 20 Nov 2020 15:36:19 +0100 Subject: [PATCH 27/56] Add exit-on-stop flag This makes it possible to keep the server running when all processes stop. --- goreman.go | 3 +++ proc.go | 10 ++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/goreman.go b/goreman.go index f055fb6..cce3bdd 100644 --- a/goreman.go +++ b/goreman.go @@ -91,6 +91,9 @@ var setPorts = flag.Bool("set-ports", true, "False to avoid setting PORT env var // true to exit the supervisor var exitOnError = flag.Bool("exit-on-error", false, "Exit goreman if a subprocess quits with a nonzero return code") +// true to exit the supervisor when all processes stop +var exitOnStop = flag.Bool("exit-on-stop", true, "Exit goreman if all subprocesses stop") + // show timestamp in log var logTime = flag.Bool("logtime", true, "show timestamp in log") diff --git a/proc.go b/proc.go index e86b3a3..61305f2 100644 --- a/proc.go +++ b/proc.go @@ -145,10 +145,12 @@ func startProcs(sc <-chan os.Signal, rpcCh <-chan *rpcMessage, exitOnError bool) } allProcsDone := make(chan struct{}, 1) - go func() { - wg.Wait() - allProcsDone <- struct{}{} - }() + if *exitOnStop { + go func() { + wg.Wait() + allProcsDone <- struct{}{} + }() + } for { select { case rpcMsg := <-rpcCh: From 9d60e4997b2478abd07945891ebf7aeeeb8622a6 Mon Sep 17 00:00:00 2001 From: Samuel Cochran Date: Sun, 14 Feb 2021 14:02:36 +1100 Subject: [PATCH 28/56] Also build linux + darwin arm64 --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e8544c1..2615395 100644 --- a/Makefile +++ b/Makefile @@ -25,7 +25,8 @@ $(GOBIN)/gobump: .PHONY: cross cross: $(GOBIN)/goxz - goxz -n $(BIN) -pv=v$(VERSION) -build-ldflags=$(BUILD_LDFLAGS) . + goxz -n $(BIN) -os linux,darwin,windows -arch amd64 -pv=v$(VERSION) -build-ldflags=$(BUILD_LDFLAGS) . + goxz -n $(BIN) -os linux,darwin -arch arm64 -pv=v$(VERSION) -build-ldflags=$(BUILD_LDFLAGS) . $(GOBIN)/goxz: cd && go get github.com/Songmu/goxz/cmd/goxz From d27ffdd10ba35ea752dc0b6e1ba50965d05c356e Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Sat, 3 Apr 2021 22:48:19 -0400 Subject: [PATCH 29/56] Minor fixes to README --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1140c10..f4903f3 100644 --- a/README.md +++ b/README.md @@ -13,11 +13,11 @@ https://github.com/ddollar/foreman goreman start Will start all commands defined in the `Procfile` and display their outputs. -Any signals are forwarded to the processes. +Any signals are forwarded to each process. ## Example -See `_example` directory +See [`_example`](_example/) directory ## License @@ -25,10 +25,10 @@ MIT ## Design -The main goroutine loads Procfile and starts each command in the file. Afterwards, it is driven by the following two kinds of events, and then take proper action against the managed processes. +The main goroutine loads `Procfile` and starts each command in the file. Afterwards, it is driven by the following two kinds of events, and then take proper action against the managed processes. -1. It receives a signal, which could be one of SIGINT,SIGTERM and SIGHUP; -2. It receives a RPC call, which is triggered by the command "goreman run COMMAND [PROCESS...]". +1. It receives a signal, which could be one of `SIGINT`, `SIGTERM`, and `SIGHUP`; +2. It receives an RPC call, which is triggered by the command `goreman run COMMAND [PROCESS...]`. ![design](images/design.png) From 3d912dd85e6914f4e6b1598f21d15afa6df3a654 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Tue, 19 Oct 2021 22:16:24 +0900 Subject: [PATCH 30/56] Bump up --- goreman.go => main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename goreman.go => main.go (99%) diff --git a/goreman.go b/main.go similarity index 99% rename from goreman.go rename to main.go index cce3bdd..6c0731c 100644 --- a/goreman.go +++ b/main.go @@ -24,7 +24,7 @@ import ( // time by goreleaser (see .goreleaser.yml). const ( name = "goreman" - version = "0.3.7" + version = "0.3.8" revision = "HEAD" ) From 65b10981a83c972a4f3a29db23c17a779489a7e5 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Tue, 19 Oct 2021 22:19:28 +0900 Subject: [PATCH 31/56] Fix GitHub workflow --- .github/workflows/release.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9fa7fa3..96ef3e3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,11 +13,9 @@ jobs: - name: Checkout code uses: actions/checkout@master - name: Setup Go - uses: actions/setup-go@v1 + uses: actions/setup-go@v2 with: go-version: 1.x - - name: Add $GOPATH/bin to $PATH - run: echo "::add-path::$(go env GOPATH)/bin" - name: Cross build run: make cross - name: Create Release @@ -32,3 +30,4 @@ jobs: run: make upload env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + From 10bb8b4baca907a03eae8d58b664312c60f661a1 Mon Sep 17 00:00:00 2001 From: biningo Date: Sat, 27 Nov 2021 14:20:19 +0800 Subject: [PATCH 32/56] Remove if and mod index --- main.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/main.go b/main.go index 6c0731c..a0853cb 100644 --- a/main.go +++ b/main.go @@ -167,10 +167,7 @@ func readProcfile(cfg *config) error { if len(k) > maxProcNameLength { maxProcNameLength = len(k) } - index++ - if index >= len(colors) { - index = 0 - } + index = (index + 1) % len(colors) } if len(procs) == 0 { return errors.New("no valid entry") From 1d2ef284d35bbe43b9f6c2b11bba17dc1a5a9e38 Mon Sep 17 00:00:00 2001 From: btc <734339+btc@users.noreply.github.com> Date: Tue, 30 Nov 2021 15:46:27 -0500 Subject: [PATCH 33/56] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ``` λ. go get github.com/mattn/goreman go get: installing executables with 'go get' in module mode is deprecated. Use 'go install pkg@version' instead. For more information, see https://golang.org/doc/go-get-install-deprecation or run 'go help get' or 'go help install'. λ. go install github.com/mattn/goreman go install: version is required when current directory is not in a module Try 'go install github.com/mattn/goreman@latest' to install the latest version ``` --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f4903f3..68ee526 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ https://github.com/ddollar/foreman ## Getting Started - go get github.com/mattn/goreman - + go install github.com/mattn/goreman@latest + ## Usage goreman start From 2d81cacfffc1ced98e117dc9f3815ffdfb403cf1 Mon Sep 17 00:00:00 2001 From: btc <734339+btc@users.noreply.github.com> Date: Wed, 1 Dec 2021 12:28:25 -0500 Subject: [PATCH 34/56] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 68ee526..fba72fa 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ https://github.com/ddollar/foreman ## Getting Started go install github.com/mattn/goreman@latest - + ## Usage goreman start From e92d544f7e9fc2aa2fdc0958a9b2ce25c0843ebb Mon Sep 17 00:00:00 2001 From: exfly Date: Sat, 8 Jan 2022 20:20:47 +0800 Subject: [PATCH 35/56] fix: go1.18 build failed --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index e5a90ac..ef56de4 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,6 @@ require ( github.com/joho/godotenv v1.3.0 github.com/mattn/go-colorable v0.1.4 github.com/mattn/go-isatty v0.0.10 // indirect - golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 + golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e gopkg.in/yaml.v2 v2.2.7 ) diff --git a/go.sum b/go.sum index b690259..8b098af 100644 --- a/go.sum +++ b/go.sum @@ -29,6 +29,8 @@ golang.org/x/sys v0.0.0-20200121082415-34d275377bf9 h1:N19i1HjUnR7TF7rMt8O4p3dLv golang.org/x/sys v0.0.0-20200121082415-34d275377bf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 h1:1/DFK4b7JH8DmkqhUk48onnSfrPzImPoVxuomtbT2nk= golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= From df1209e7cdbad10aecc0aa75d332bc32822925f5 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Sat, 8 Jan 2022 21:34:10 +0900 Subject: [PATCH 36/56] Bump --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index a0853cb..80f82ea 100644 --- a/main.go +++ b/main.go @@ -24,7 +24,7 @@ import ( // time by goreleaser (see .goreleaser.yml). const ( name = "goreman" - version = "0.3.8" + version = "0.3.9" revision = "HEAD" ) From f4225605038820af23c159eeb42e3383db32c72a Mon Sep 17 00:00:00 2001 From: "sirun.wang" <870355373@qq.com> Date: Wed, 26 Jan 2022 00:51:03 +0800 Subject: [PATCH 37/56] delete judge bool with == --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 80f82ea..0b508c7 100644 --- a/main.go +++ b/main.go @@ -157,7 +157,7 @@ func readProcfile(cfg *config) error { }) } proc := &procInfo{name: k, cmdline: v, colorIndex: index} - if *setPorts == true { + if *setPorts { proc.setPort = true proc.port = cfg.BasePort cfg.BasePort += 100 From 3944afa556575261e5416072697f033ec3cc6c2a Mon Sep 17 00:00:00 2001 From: "sirun.wang" <870355373@qq.com> Date: Wed, 26 Jan 2022 01:50:20 +0800 Subject: [PATCH 38/56] detele judge bool false with == --- proc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proc.go b/proc.go index 61305f2..01b4c70 100644 --- a/proc.go +++ b/proc.go @@ -39,7 +39,7 @@ func spawnProc(name string, errCh chan<- error) { err := cmd.Wait() proc.mu.Lock() proc.cond.Broadcast() - if err != nil && proc.stoppedBySupervisor == false { + if err != nil && !proc.stoppedBySupervisor { select { case errCh <- err: default: From d4197a3bb129955e2ab1dadba5448c5465ac99a8 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Tue, 8 Mar 2022 16:40:43 +0900 Subject: [PATCH 39/56] Update dependencies --- go.mod | 9 ++++----- go.sum | 53 ++++++++++++----------------------------------------- 2 files changed, 16 insertions(+), 46 deletions(-) diff --git a/go.mod b/go.mod index ef56de4..104e692 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,8 @@ module github.com/mattn/goreman go 1.13 require ( - github.com/joho/godotenv v1.3.0 - github.com/mattn/go-colorable v0.1.4 - github.com/mattn/go-isatty v0.0.10 // indirect - golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e - gopkg.in/yaml.v2 v2.2.7 + github.com/joho/godotenv v1.4.0 + github.com/mattn/go-colorable v0.1.12 + golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7 + gopkg.in/yaml.v2 v2.4.0 ) diff --git a/go.sum b/go.sum index 8b098af..f0f2378 100644 --- a/go.sum +++ b/go.sum @@ -1,43 +1,14 @@ -github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -golang.org/x/sys v0.0.0-20180925112736-b09afc3d579e h1:LSlw/Dbj0MkNvPYAAkGinYmGliq+aqS7eKPYlE4oWC4= -golang.org/x/sys v0.0.0-20180925112736-b09afc3d579e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190907184412-d223b2b6db03 h1:b3JiLYVaG9kHjTcOQIoUh978YMCO7oVTQQBLudU47zY= -golang.org/x/sys v0.0.0-20190907184412-d223b2b6db03/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200107162124-548cf772de50 h1:YvQ10rzcqWXLlJZ3XCUoO25savxmscf4+SC+ZqiCHhA= -golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200121082415-34d275377bf9 h1:N19i1HjUnR7TF7rMt8O4p3dLvqvmYyzB6ifMFmrbY50= -golang.org/x/sys v0.0.0-20200121082415-34d275377bf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 h1:1/DFK4b7JH8DmkqhUk48onnSfrPzImPoVxuomtbT2nk= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= +github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7 h1:8IVLkfbr2cLhv0a/vKq4UFUcJym8RmDoDboxCFWEjYE= +golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= From ecd4213d5ba82efc668132aa8aeccff44dd34a25 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Tue, 8 Mar 2022 16:41:48 +0900 Subject: [PATCH 40/56] Bump --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 0b508c7..960b675 100644 --- a/main.go +++ b/main.go @@ -24,7 +24,7 @@ import ( // time by goreleaser (see .goreleaser.yml). const ( name = "goreman" - version = "0.3.9" + version = "0.3.10" revision = "HEAD" ) From 3a3009adba3671742012961bcf2adfadd662ff82 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Tue, 8 Mar 2022 17:17:37 +0900 Subject: [PATCH 41/56] Upgrade to yaml.v3 --- go.mod | 2 +- go.sum | 4 ++-- main.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 104e692..0250dcd 100644 --- a/go.mod +++ b/go.mod @@ -6,5 +6,5 @@ require ( github.com/joho/godotenv v1.4.0 github.com/mattn/go-colorable v0.1.12 golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7 - gopkg.in/yaml.v2 v2.4.0 + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b ) diff --git a/go.sum b/go.sum index f0f2378..26bbc4a 100644 --- a/go.sum +++ b/go.sum @@ -10,5 +10,5 @@ golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7 h1:8IVLkfbr2cLhv0a/vKq4UFUcJ golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index 960b675..d8d6d76 100644 --- a/main.go +++ b/main.go @@ -16,7 +16,7 @@ import ( "sync" "github.com/joho/godotenv" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" ) // version is the git tag at the time of build and is used to denote the From 6006c6e410ec5a5ba22b50e96227754a42f2834d Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Tue, 8 Mar 2022 17:18:31 +0900 Subject: [PATCH 42/56] Bump --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index d8d6d76..c9de44c 100644 --- a/main.go +++ b/main.go @@ -24,7 +24,7 @@ import ( // time by goreleaser (see .goreleaser.yml). const ( name = "goreman" - version = "0.3.10" + version = "0.3.11" revision = "HEAD" ) From 8e8896ee52db01b18eded40c42acc8b66c5be0b0 Mon Sep 17 00:00:00 2001 From: Kevin Burke Date: Thu, 28 Apr 2022 20:54:39 -0700 Subject: [PATCH 43/56] main: add option to disable RPC server By default, goreman opens a port to the outside world that can accept commands, which could lead to potentially bad or unexpected consequences. (Also, my Mac asks me to approve the connection every single time I start goreman). Also add new-style build tags. --- _example/web.go | 1 + main.go | 6 +++++- proc_posix.go | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/_example/web.go b/_example/web.go index c5912f2..e24714b 100644 --- a/_example/web.go +++ b/_example/web.go @@ -1,3 +1,4 @@ +//go:build ignore // +build ignore package main diff --git a/main.go b/main.go index c9de44c..53be4cf 100644 --- a/main.go +++ b/main.go @@ -80,6 +80,8 @@ var procfile = flag.String("f", "Procfile", "proc file") // rpc port number. var port = flag.Uint("p", defaultPort(), "port") +var startRPCServer = flag.Bool("rpc-server", true, "Start an RPC server listening on "+defaultAddr()) + // base directory var basedir = flag.String("basedir", "", "base directory") @@ -264,7 +266,9 @@ func start(ctx context.Context, sig <-chan os.Signal, cfg *config) error { } godotenv.Load() rpcChan := make(chan *rpcMessage, 10) - go startServer(ctx, rpcChan, cfg.Port) + if *startRPCServer { + go startServer(ctx, rpcChan, cfg.Port) + } procsErr := startProcs(sig, rpcChan, cfg.ExitOnError) return procsErr } diff --git a/proc_posix.go b/proc_posix.go index ae813f3..7dbd375 100644 --- a/proc_posix.go +++ b/proc_posix.go @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows package main From c8c63a1b6e7ed24d2ec4424f0215d25b7bb13d81 Mon Sep 17 00:00:00 2001 From: Kevin Burke Date: Thu, 28 Apr 2022 21:05:00 -0700 Subject: [PATCH 44/56] .github: test using latest Go version I'm assuming Go 1.13 is there for backward compatibility, so test that version as well as the most recent version. --- .github/workflows/go.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 2b48492..4136074 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -5,16 +5,19 @@ jobs: test: name: Test runs-on: ubuntu-latest + strategy: + matrix: + go: [ '1.13.x', '1.18.x' ] steps: - name: Set up Go - uses: actions/setup-go@v1 + uses: actions/setup-go@v3 with: - go-version: 1.13 + go-version: ${{ matrix.go }} id: go - name: Check out code into the Go module directory - uses: actions/checkout@v1 + uses: actions/checkout@v3 - name: Test run: go test -v -race ./... From e806360df8527f101fc3f9a305a02f637a20063d Mon Sep 17 00:00:00 2001 From: itchyny Date: Mon, 11 Jul 2022 17:59:50 +0900 Subject: [PATCH 45/56] Use go install instead of go get in Makefile --- .gitignore | 2 ++ Makefile | 26 +++++--------------------- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index b883f1f..808f7d7 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ +/goreman +/goxz *.exe diff --git a/Makefile b/Makefile index 2615395..6f2d8ab 100644 --- a/Makefile +++ b/Makefile @@ -3,10 +3,9 @@ VERSION := $$(make -s show-version) CURRENT_REVISION := $(shell git rev-parse --short HEAD) BUILD_LDFLAGS := "-s -w -X main.revision=$(CURRENT_REVISION)" GOBIN ?= $(shell go env GOPATH)/bin -export GO111MODULE=on .PHONY: all -all: clean build +all: build .PHONY: build build: @@ -21,15 +20,14 @@ show-version: $(GOBIN)/gobump @gobump show -r . $(GOBIN)/gobump: - @cd && go get github.com/x-motemen/gobump/cmd/gobump + @go install github.com/x-motemen/gobump/cmd/gobump@latest .PHONY: cross cross: $(GOBIN)/goxz - goxz -n $(BIN) -os linux,darwin,windows -arch amd64 -pv=v$(VERSION) -build-ldflags=$(BUILD_LDFLAGS) . - goxz -n $(BIN) -os linux,darwin -arch arm64 -pv=v$(VERSION) -build-ldflags=$(BUILD_LDFLAGS) . + goxz -n $(BIN) -pv=v$(VERSION) -build-ldflags=$(BUILD_LDFLAGS) . $(GOBIN)/goxz: - cd && go get github.com/Songmu/goxz/cmd/goxz + go install github.com/Songmu/goxz/cmd/goxz@latest .PHONY: test test: build @@ -40,23 +38,9 @@ clean: rm -rf $(BIN) goxz go clean -.PHONY: bump -bump: $(GOBIN)/gobump -ifneq ($(shell git status --porcelain),) - $(error git workspace is dirty) -endif -ifneq ($(shell git rev-parse --abbrev-ref HEAD),master) - $(error current branch is not master) -endif - @gobump up -w . - git commit -am "bump up version to $(VERSION)" - git tag "v$(VERSION)" - git push origin master - git push origin "refs/tags/v$(VERSION)" - .PHONY: upload upload: $(GOBIN)/ghr ghr "v$(VERSION)" goxz $(GOBIN)/ghr: - cd && go get github.com/tcnksm/ghr + go install github.com/tcnksm/ghr@latest From a9b05c5b88bd2774660d6aa3cef3fa22cea9cf49 Mon Sep 17 00:00:00 2001 From: itchyny Date: Mon, 11 Jul 2022 18:07:53 +0900 Subject: [PATCH 46/56] Update dependencies --- go.mod | 8 +++++--- go.sum | 8 ++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 0250dcd..28eadc1 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,12 @@ module github.com/mattn/goreman -go 1.13 +go 1.17 require ( github.com/joho/godotenv v1.4.0 github.com/mattn/go-colorable v0.1.12 - golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7 - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b + golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d + gopkg.in/yaml.v3 v3.0.1 ) + +require github.com/mattn/go-isatty v0.0.14 // indirect diff --git a/go.sum b/go.sum index 26bbc4a..2cdece9 100644 --- a/go.sum +++ b/go.sum @@ -6,9 +6,9 @@ github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7 h1:8IVLkfbr2cLhv0a/vKq4UFUcJym8RmDoDboxCFWEjYE= -golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d h1:/m5NbqQelATgoSPVC2Z23sR4kVNokFwDDyWh/3rGY+I= +golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From 70d9bb63105e6b9b73c8fef3f9c415acc14bed07 Mon Sep 17 00:00:00 2001 From: itchyny Date: Mon, 11 Jul 2022 18:08:22 +0900 Subject: [PATCH 47/56] Switch from deprecated io/ioutil package --- export.go | 3 +-- goreman_test.go | 7 +++---- main.go | 5 ++--- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/export.go b/export.go index 8c7391b..324fadf 100644 --- a/export.go +++ b/export.go @@ -2,7 +2,6 @@ package main import ( "fmt" - "io/ioutil" "os" "path/filepath" "strings" @@ -25,7 +24,7 @@ func exportUpstart(cfg *config, path string) error { if err != nil { return err } - b, err := ioutil.ReadFile(filepath.Join(filepath.Dir(procfile), ".env")) + b, err := os.ReadFile(filepath.Join(filepath.Dir(procfile), ".env")) if err == nil { for _, line := range strings.Split(string(b), "\n") { token := strings.SplitN(line, "=", 2) diff --git a/goreman_test.go b/goreman_test.go index 8b919f6..b5d3b58 100644 --- a/goreman_test.go +++ b/goreman_test.go @@ -2,7 +2,6 @@ package main import ( "context" - "io/ioutil" "os" "os/exec" "path/filepath" @@ -23,13 +22,13 @@ func TestMain(m *testing.M) { } code := `package main;import ("os";"strconv";"time");func main(){i,_:=strconv.ParseFloat(os.Args[1]);time.Sleep(time.Duration(i)*time.Second)}` - dir, err := ioutil.TempDir("", "goreman-test") + dir, err := os.MkdirTemp("", "goreman-test") if err != nil { panic(err) } sleep = filepath.Join(dir, "sleep.exe") src := filepath.Join(dir, "sleep.go") - err = ioutil.WriteFile(src, []byte(code), 0644) + err = os.WriteFile(src, []byte(code), 0644) if err != nil { panic(err) } @@ -51,7 +50,7 @@ func TestMain(m *testing.M) { func startGoreman(ctx context.Context, t *testing.T, ch <-chan os.Signal, file []byte) error { t.Helper() - f, err := ioutil.TempFile("", "") + f, err := os.CreateTemp("", "") if err != nil { t.Fatal(err) } diff --git a/main.go b/main.go index 53be4cf..724da49 100644 --- a/main.go +++ b/main.go @@ -5,7 +5,6 @@ import ( "errors" "flag" "fmt" - "io/ioutil" "os" "os/exec" "regexp" @@ -129,7 +128,7 @@ func readConfig() *config { cfg.ExitOnError = *exitOnError cfg.Args = flag.Args() - b, err := ioutil.ReadFile(".goreman") + b, err := os.ReadFile(".goreman") if err == nil { yaml.Unmarshal(b, &cfg) } @@ -138,7 +137,7 @@ func readConfig() *config { // read Procfile and parse it. func readProcfile(cfg *config) error { - content, err := ioutil.ReadFile(cfg.Procfile) + content, err := os.ReadFile(cfg.Procfile) if err != nil { return err } From 93ff910596deb801d24f8c63413959689caa40a1 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Tue, 12 Jul 2022 12:45:08 +0900 Subject: [PATCH 48/56] Bump --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 724da49..f1f398e 100644 --- a/main.go +++ b/main.go @@ -23,7 +23,7 @@ import ( // time by goreleaser (see .goreleaser.yml). const ( name = "goreman" - version = "0.3.11" + version = "0.3.13" revision = "HEAD" ) From 06ce4613ab32686114aa8718bfd478d6e051cb40 Mon Sep 17 00:00:00 2001 From: itchyny Date: Wed, 13 Jul 2022 10:32:53 +0900 Subject: [PATCH 49/56] Update Go version on CI --- .github/workflows/go.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 4136074..9f20166 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - go: [ '1.13.x', '1.18.x' ] + go: [ '1.17.x', '1.18.x' ] steps: - name: Set up Go From 822111cd575b3fd5b78ab446a220c279365f790e Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Fri, 17 Mar 2023 10:21:33 +0900 Subject: [PATCH 50/56] update dependencies --- .github/workflows/go.yml | 2 +- Makefile | 23 +++++++++++++++++++---- go.mod | 10 +++++----- go.sum | 20 ++++++++++---------- 4 files changed, 35 insertions(+), 20 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 9f20166..994b8e5 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - go: [ '1.17.x', '1.18.x' ] + go: [ '1.19.x', '1.20.x' ] steps: - name: Set up Go diff --git a/Makefile b/Makefile index 6f2d8ab..132744b 100644 --- a/Makefile +++ b/Makefile @@ -3,9 +3,10 @@ VERSION := $$(make -s show-version) CURRENT_REVISION := $(shell git rev-parse --short HEAD) BUILD_LDFLAGS := "-s -w -X main.revision=$(CURRENT_REVISION)" GOBIN ?= $(shell go env GOPATH)/bin +export GO111MODULE=on .PHONY: all -all: build +all: clean build .PHONY: build build: @@ -17,14 +18,14 @@ install: .PHONY: show-version show-version: $(GOBIN)/gobump - @gobump show -r . + gobump show -r . $(GOBIN)/gobump: - @go install github.com/x-motemen/gobump/cmd/gobump@latest + go install github.com/x-motemen/gobump/cmd/gobump@latest .PHONY: cross cross: $(GOBIN)/goxz - goxz -n $(BIN) -pv=v$(VERSION) -build-ldflags=$(BUILD_LDFLAGS) . + goxz -n $(BIN) -pv=v$(VERSION) -arch=amd64 -build-ldflags=$(BUILD_LDFLAGS) . $(GOBIN)/goxz: go install github.com/Songmu/goxz/cmd/goxz@latest @@ -38,6 +39,20 @@ clean: rm -rf $(BIN) goxz go clean +.PHONY: bump +bump: $(GOBIN)/gobump +ifneq ($(shell git status --porcelain),) + $(error git workspace is dirty) +endif +ifneq ($(shell git rev-parse --abbrev-ref HEAD),main) + $(error current branch is not main) +endif + @gobump up -w . + git commit -am "bump up version to $(VERSION)" + git tag "v$(VERSION)" + git push origin main + git push origin "refs/tags/v$(VERSION)" + .PHONY: upload upload: $(GOBIN)/ghr ghr "v$(VERSION)" goxz diff --git a/go.mod b/go.mod index 28eadc1..8e84165 100644 --- a/go.mod +++ b/go.mod @@ -1,12 +1,12 @@ module github.com/mattn/goreman -go 1.17 +go 1.19 require ( - github.com/joho/godotenv v1.4.0 - github.com/mattn/go-colorable v0.1.12 - golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d + github.com/joho/godotenv v1.5.1 + github.com/mattn/go-colorable v0.1.13 + golang.org/x/sys v0.6.0 gopkg.in/yaml.v3 v3.0.1 ) -require github.com/mattn/go-isatty v0.0.14 // indirect +require github.com/mattn/go-isatty v0.0.17 // indirect diff --git a/go.sum b/go.sum index 2cdece9..cd3a846 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,13 @@ -github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= -github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d h1:/m5NbqQelATgoSPVC2Z23sR4kVNokFwDDyWh/3rGY+I= -golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= From 517169b9aa9053c12133b51674de50f454d47705 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Fri, 17 Mar 2023 10:23:54 +0900 Subject: [PATCH 51/56] fix branch name --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 132744b..d51fede 100644 --- a/Makefile +++ b/Makefile @@ -44,13 +44,13 @@ bump: $(GOBIN)/gobump ifneq ($(shell git status --porcelain),) $(error git workspace is dirty) endif -ifneq ($(shell git rev-parse --abbrev-ref HEAD),main) - $(error current branch is not main) +ifneq ($(shell git rev-parse --abbrev-ref HEAD),master) + $(error current branch is not master) endif @gobump up -w . git commit -am "bump up version to $(VERSION)" git tag "v$(VERSION)" - git push origin main + git push origin master git push origin "refs/tags/v$(VERSION)" .PHONY: upload From eaf955cca418ea9ef2f21ce8ea7b433c6d2676d2 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Fri, 17 Mar 2023 10:24:07 +0900 Subject: [PATCH 52/56] bump up version to 0.3.14 --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index f1f398e..741fe0c 100644 --- a/main.go +++ b/main.go @@ -23,7 +23,7 @@ import ( // time by goreleaser (see .goreleaser.yml). const ( name = "goreman" - version = "0.3.13" + version = "0.3.14" revision = "HEAD" ) From b2897161a1e70a822c851d26895c0d9c83b06d56 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Sat, 18 Mar 2023 22:13:10 +0900 Subject: [PATCH 53/56] release for all archtecture --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d51fede..54693a5 100644 --- a/Makefile +++ b/Makefile @@ -25,7 +25,7 @@ $(GOBIN)/gobump: .PHONY: cross cross: $(GOBIN)/goxz - goxz -n $(BIN) -pv=v$(VERSION) -arch=amd64 -build-ldflags=$(BUILD_LDFLAGS) . + goxz -n $(BIN) -pv=v$(VERSION) -build-ldflags=$(BUILD_LDFLAGS) . $(GOBIN)/goxz: go install github.com/Songmu/goxz/cmd/goxz@latest From ebb9736b7c7f7f3425280ab69e1f7989fb34eadc Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Sat, 18 Mar 2023 22:13:30 +0900 Subject: [PATCH 54/56] bump up version to 0.3.15 --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 741fe0c..d1459b2 100644 --- a/main.go +++ b/main.go @@ -23,7 +23,7 @@ import ( // time by goreleaser (see .goreleaser.yml). const ( name = "goreman" - version = "0.3.14" + version = "0.3.15" revision = "HEAD" ) From 07577f9d92419458e712242d14d0f7efb9e404f5 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Tue, 26 Nov 2024 20:01:11 +0900 Subject: [PATCH 55/56] update deps --- .github/workflows/go.yml | 2 +- go.mod | 6 +++--- go.sum | 7 ++++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 994b8e5..b269d36 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - go: [ '1.19.x', '1.20.x' ] + go: [ '1.22.x', '1.23.x' ] steps: - name: Set up Go diff --git a/go.mod b/go.mod index 8e84165..311a5db 100644 --- a/go.mod +++ b/go.mod @@ -1,12 +1,12 @@ module github.com/mattn/goreman -go 1.19 +go 1.23 require ( github.com/joho/godotenv v1.5.1 github.com/mattn/go-colorable v0.1.13 - golang.org/x/sys v0.6.0 + golang.org/x/sys v0.27.0 gopkg.in/yaml.v3 v3.0.1 ) -require github.com/mattn/go-isatty v0.0.17 // indirect +require github.com/mattn/go-isatty v0.0.20 // indirect diff --git a/go.sum b/go.sum index cd3a846..07908fd 100644 --- a/go.sum +++ b/go.sum @@ -3,11 +3,12 @@ github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwA github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= From 2848c457e011dab28da79f0bdc9af6c05d32f334 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Tue, 26 Nov 2024 20:01:28 +0900 Subject: [PATCH 56/56] bump up version to 0.3.16 --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index d1459b2..dacb92b 100644 --- a/main.go +++ b/main.go @@ -23,7 +23,7 @@ import ( // time by goreleaser (see .goreleaser.yml). const ( name = "goreman" - version = "0.3.15" + version = "0.3.16" revision = "HEAD" )