Merge branch 'master' of github.com:drov0/cli
This commit is contained in:
commit
ea5443c879
1
.github/.codecov.yml
vendored
Normal file
1
.github/.codecov.yml
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
comment: false
|
63
.github/stale.yml
vendored
Normal file
63
.github/stale.yml
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
# Configuration for probot-stale - https://github.com/probot/stale
|
||||||
|
|
||||||
|
# Number of days of inactivity before an Issue or Pull Request becomes stale
|
||||||
|
daysUntilStale: 90
|
||||||
|
|
||||||
|
# Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
|
||||||
|
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
|
||||||
|
daysUntilClose: 30
|
||||||
|
|
||||||
|
# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled)
|
||||||
|
onlyLabels: []
|
||||||
|
|
||||||
|
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
|
||||||
|
exemptLabels:
|
||||||
|
- pinned
|
||||||
|
- security
|
||||||
|
- "type: maintenance"
|
||||||
|
|
||||||
|
# Set to true to ignore issues in a project (defaults to false)
|
||||||
|
exemptProjects: false
|
||||||
|
|
||||||
|
# Set to true to ignore issues in a milestone (defaults to false)
|
||||||
|
exemptMilestones: false
|
||||||
|
|
||||||
|
# Set to true to ignore issues with an assignee (defaults to false)
|
||||||
|
exemptAssignees: false
|
||||||
|
|
||||||
|
# Label to use when marking as stale
|
||||||
|
staleLabel: "status: stale"
|
||||||
|
|
||||||
|
# Comment to post when marking as stale. Set to `false` to disable
|
||||||
|
markComment: >
|
||||||
|
This issue or PR has been automatically marked as stale because it has not had
|
||||||
|
recent activity. Please add a comment bumping this if you're still
|
||||||
|
interested in it's resolution! Thanks for your help, please let us know
|
||||||
|
if you need anything else.
|
||||||
|
|
||||||
|
# Comment to post when removing the stale label.
|
||||||
|
unmarkComment: >
|
||||||
|
This issue or PR has been bumped and is no longer marked as stale! Feel free
|
||||||
|
to bump it again in the future, if it's still relevant.
|
||||||
|
|
||||||
|
# Comment to post when closing a stale Issue or Pull Request.
|
||||||
|
closeComment: >
|
||||||
|
Closing this as it has become stale.
|
||||||
|
|
||||||
|
# Limit the number of actions per hour, from 1-30. Default is 30
|
||||||
|
limitPerRun: 30
|
||||||
|
|
||||||
|
# Limit to only `issues` or `pulls`
|
||||||
|
# only: issues
|
||||||
|
|
||||||
|
# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':
|
||||||
|
# pulls:
|
||||||
|
# daysUntilStale: 30
|
||||||
|
# markComment: >
|
||||||
|
# This pull request has been automatically marked as stale because it has not had
|
||||||
|
# recent activity. It will be closed if no further activity occurs. Thank you
|
||||||
|
# for your contributions.
|
||||||
|
|
||||||
|
# issues:
|
||||||
|
# exemptLabels:
|
||||||
|
# - confirmed
|
65
.github/workflows/cli.yml
vendored
Normal file
65
.github/workflows/cli.yml
vendored
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
name: Run Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- v1
|
||||||
|
|
||||||
|
env:
|
||||||
|
GO111MODULE: on
|
||||||
|
GOPROXY: https://proxy.golang.org
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest, macos-latest]
|
||||||
|
go: [1.11, 1.12, 1.13]
|
||||||
|
name: ${{ matrix.os }} @ Go ${{ matrix.go }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
steps:
|
||||||
|
- name: Set up Go ${{ matrix.go }}
|
||||||
|
uses: actions/setup-go@v1
|
||||||
|
with:
|
||||||
|
go-version: ${{ matrix.go }}
|
||||||
|
|
||||||
|
- name: Set GOPATH and PATH
|
||||||
|
run: |
|
||||||
|
echo "::set-env name=GOPATH::$(dirname $GITHUB_WORKSPACE)"
|
||||||
|
echo "::add-path::$(dirname $GITHUB_WORKSPACE)/bin"
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Checkout Code
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
with:
|
||||||
|
ref: ${{ github.ref }}
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: |
|
||||||
|
mkdir -p $GOPATH/bin
|
||||||
|
curl -L -o $GOPATH/bin/gfmrun "https://github.com/urfave/gfmrun/releases/download/v1.2.14/gfmrun-$(go env GOOS)-amd64-v1.2.14"
|
||||||
|
chmod +x $GOPATH/bin/gfmrun
|
||||||
|
npm install markdown-toc
|
||||||
|
|
||||||
|
- name: Run Tests (v1)
|
||||||
|
if: contains(github.base_ref, 'v1')
|
||||||
|
run: |
|
||||||
|
go run build.go vet
|
||||||
|
go run build.go test
|
||||||
|
go run build.go gfmrun docs/v1/manual.md
|
||||||
|
go run build.go toc docs/v1/manual.md
|
||||||
|
|
||||||
|
- name: Run Tests (v2)
|
||||||
|
if: contains(github.base_ref, 'master')
|
||||||
|
run: |
|
||||||
|
go run build.go vet
|
||||||
|
go run build.go test
|
||||||
|
go run build.go gfmrun docs/v2/manual.md
|
||||||
|
go run build.go toc docs/v2/manual.md
|
||||||
|
|
||||||
|
- name: Send Coverage Report
|
||||||
|
if: success()
|
||||||
|
env:
|
||||||
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
run: bash <(curl -s https://codecov.io/bash)
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@
|
|||||||
*.orig
|
*.orig
|
||||||
node_modules/
|
node_modules/
|
||||||
vendor
|
vendor
|
||||||
|
.idea
|
||||||
|
36
.travis.yml
36
.travis.yml
@ -1,36 +0,0 @@
|
|||||||
language: go
|
|
||||||
sudo: false
|
|
||||||
dist: bionic
|
|
||||||
osx_image: xcode10
|
|
||||||
go:
|
|
||||||
- 1.11.x
|
|
||||||
- 1.12.x
|
|
||||||
- 1.13.x
|
|
||||||
|
|
||||||
os:
|
|
||||||
- linux
|
|
||||||
- osx
|
|
||||||
|
|
||||||
env:
|
|
||||||
GO111MODULE=on GOPROXY=https://proxy.golang.org
|
|
||||||
|
|
||||||
cache:
|
|
||||||
directories:
|
|
||||||
- node_modules
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- go get github.com/urfave/gfmrun/cmd/gfmrun
|
|
||||||
- go get golang.org/x/tools/cmd/goimports
|
|
||||||
- npm install markdown-toc
|
|
||||||
- go mod tidy
|
|
||||||
|
|
||||||
script:
|
|
||||||
- go run build.go vet
|
|
||||||
- go run build.go test
|
|
||||||
- go run build.go gfmrun docs/v1/manual.md
|
|
||||||
- go run build.go toc docs/v1/manual.md
|
|
||||||
- go run build.go gfmrun docs/v2/manual.md
|
|
||||||
- go run build.go toc docs/v2/manual.md
|
|
||||||
|
|
||||||
after_success:
|
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
|
10
app.go
10
app.go
@ -1,6 +1,7 @@
|
|||||||
package cli
|
package cli
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
@ -207,6 +208,13 @@ func (a *App) useShortOptionHandling() bool {
|
|||||||
// Run is the entry point to the cli app. Parses the arguments slice and routes
|
// Run is the entry point to the cli app. Parses the arguments slice and routes
|
||||||
// to the proper flag/args combination
|
// to the proper flag/args combination
|
||||||
func (a *App) Run(arguments []string) (err error) {
|
func (a *App) Run(arguments []string) (err error) {
|
||||||
|
return a.RunContext(context.Background(), arguments)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RunContext is like Run except it takes a Context that will be
|
||||||
|
// passed to its commands and sub-commands. Through this, you can
|
||||||
|
// propagate timeouts and cancellation requests
|
||||||
|
func (a *App) RunContext(ctx context.Context, arguments []string) (err error) {
|
||||||
a.Setup()
|
a.Setup()
|
||||||
|
|
||||||
// handle the completion flag separately from the flagset since
|
// handle the completion flag separately from the flagset since
|
||||||
@ -224,7 +232,7 @@ func (a *App) Run(arguments []string) (err error) {
|
|||||||
|
|
||||||
err = parseIter(set, a, arguments[1:], shellComplete)
|
err = parseIter(set, a, arguments[1:], shellComplete)
|
||||||
nerr := normalizeFlags(a.Flags, set)
|
nerr := normalizeFlags(a.Flags, set)
|
||||||
context := NewContext(a, set, nil)
|
context := NewContext(a, set, &Context{Context: ctx})
|
||||||
if nerr != nil {
|
if nerr != nil {
|
||||||
_, _ = fmt.Fprintln(a.Writer, nerr)
|
_, _ = fmt.Fprintln(a.Writer, nerr)
|
||||||
_ = ShowAppHelp(context)
|
_ = ShowAppHelp(context)
|
||||||
|
@ -1451,7 +1451,6 @@ func TestApp_Run_CommandWithSubcommandHasHelpTopic(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
output := buf.String()
|
output := buf.String()
|
||||||
//t.Logf("output: %q\n", buf.Bytes())
|
|
||||||
|
|
||||||
if strings.Contains(output, "No help topic for") {
|
if strings.Contains(output, "No help topic for") {
|
||||||
t.Errorf("expect a help topic, got none: \n%q", output)
|
t.Errorf("expect a help topic, got none: \n%q", output)
|
||||||
@ -1718,7 +1717,6 @@ func TestApp_Run_Categories(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
output := buf.String()
|
output := buf.String()
|
||||||
//t.Logf("output: %q\n", buf.Bytes())
|
|
||||||
|
|
||||||
if !strings.Contains(output, "1:\n command1") {
|
if !strings.Contains(output, "1:\n command1") {
|
||||||
t.Errorf("want buffer to include category %q, did not: \n%q", "1:\n command1", output)
|
t.Errorf("want buffer to include category %q, did not: \n%q", "1:\n command1", output)
|
||||||
|
@ -26,4 +26,4 @@ install:
|
|||||||
build_script:
|
build_script:
|
||||||
- go run build.go vet
|
- go run build.go vet
|
||||||
- go run build.go test
|
- go run build.go test
|
||||||
- go run build.go gfmrun docs/v1/manual.md
|
- go run build.go gfmrun docs/v1/manual.md
|
12
context.go
12
context.go
@ -5,10 +5,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
|
||||||
"os/signal"
|
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Context is a type that is passed through to
|
// Context is a type that is passed through to
|
||||||
@ -36,14 +33,7 @@ func NewContext(app *App, set *flag.FlagSet, parentCtx *Context) *Context {
|
|||||||
c.Command = &Command{}
|
c.Command = &Command{}
|
||||||
|
|
||||||
if c.Context == nil {
|
if c.Context == nil {
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
c.Context = context.Background()
|
||||||
go func() {
|
|
||||||
defer cancel()
|
|
||||||
sigs := make(chan os.Signal, 1)
|
|
||||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
|
||||||
<-sigs
|
|
||||||
}()
|
|
||||||
c.Context = ctx
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return c
|
return c
|
||||||
|
Loading…
Reference in New Issue
Block a user