diff --git a/.github/workflows/go.yaml b/.github/workflows/go.yaml deleted file mode 100644 index 383ea31..0000000 --- a/.github/workflows/go.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# This workflow will build a golang project -# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go - -name: Go - -on: - workflow_dispatch: - push: - branches: [ "master" ] - pull_request: - branches: [ "master" ] - -permissions: - contents: read - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Set up Go - uses: actions/setup-go@v4 - with: - go-version-file: "go.mod" - cache: true - - - name: Set up postgres - run: docker compose up -d - - - name: Build - run: go build -v ./... - - - name: Test - run: source pg_env && go test -p=1 -count=1 -failfast -coverprofile=coverage.txt -coverpkg=github.com/qor5/... ./... \ No newline at end of file diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 383ea31..30693e5 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -32,4 +32,4 @@ jobs: run: go build -v ./... - name: Test - run: source pg_env && go test -p=1 -count=1 -failfast -coverprofile=coverage.txt -coverpkg=github.com/qor5/... ./... \ No newline at end of file + run: source pg_env && go test -p=1 -count=1 -failfast -coverprofile=coverage.txt -coverpkg=github.com/qor5/... ./... diff --git a/bm/go.sum b/bm/go.sum index 38e8b10..ada7ca1 100644 --- a/bm/go.sum +++ b/bm/go.sum @@ -1,6 +1,7 @@ github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/lib/pq v1.3.0 h1:/qkRGz8zljWiDcFvgpwUpwIAPu3r07TDvs3Rws+o/pU= github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= diff --git a/docker-compose.yml b/docker-compose.yml index baafc82..203e1b3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,8 +1,12 @@ -version: '3.7' - services: postgres: image: postgres + healthcheck: + test: [ "CMD-SHELL", "pg_isready -U adex" ] + interval: 1s + timeout: 5s + retries: 5 + start_period: 5s restart: always environment: POSTGRES_USER: myuser diff --git a/go.mod b/go.mod index f3139be..1d041e3 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.13 require ( github.com/golang/mock v1.4.3 github.com/lib/pq v1.3.0 + github.com/pkg/errors v0.9.1 github.com/robfig/cron/v3 v3.0.1 golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 gopkg.in/yaml.v2 v2.3.0 diff --git a/go.sum b/go.sum index cb61366..acfb315 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/lib/pq v1.3.0 h1:/qkRGz8zljWiDcFvgpwUpwIAPu3r07TDvs3Rws+o/pU= github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= diff --git a/pg/job.go b/pg/job.go index ea426a7..6a28f71 100644 --- a/pg/job.go +++ b/pg/job.go @@ -3,8 +3,10 @@ package pg import ( "context" "database/sql" + "fmt" "time" + "github.com/pkg/errors" "github.com/qor5/go-que" ) @@ -106,7 +108,7 @@ func (j *job) Expire(ctx context.Context, cerr error) error { var errMsg, errStack string if cerr != nil { errMsg = cerr.Error() - errStack = que.Stack(4) + errStack = getErrorStack(cerr) } _, err := j.exec(j.tx)(ctx, execSQL, errMsg, errStack, j.id) @@ -125,7 +127,7 @@ func (j *job) RetryAfter(ctx context.Context, interval time.Duration, cerr error var errMsg, errStack string if cerr != nil { errMsg = cerr.Error() - errStack = que.Stack(4) + errStack = getErrorStack(cerr) } _, err := j.exec(j.tx)(ctx, retryJob, intervalSeconds, errMsg, errStack, j.id) return err @@ -145,3 +147,15 @@ func (j *job) exec(tx *sql.Tx) func(context.Context, string, ...interface{}) (sq } return j.db.ExecContext } + +func getErrorStack(err error) string { + if err == nil { + return "" + } + if _, ok := err.(interface { + StackTrace() errors.StackTrace + }); ok { + return fmt.Sprintf("%+v", err) + } + return que.Stack(5) +} diff --git a/scheduler/provider.go b/scheduler/provider.go index ce39175..5c732f3 100644 --- a/scheduler/provider.go +++ b/scheduler/provider.go @@ -4,7 +4,9 @@ import ( "io" "io/ioutil" "os" + "strings" + "github.com/pkg/errors" "gopkg.in/yaml.v2" ) @@ -28,6 +30,9 @@ type FileProvider struct { } func (fp *FileProvider) Provide() (Schedule, error) { + if strings.Contains(fp.Filename, "../") || strings.Contains(fp.Filename, "..\\") { + return nil, errors.Errorf("Invalid file path: %s", fp.Filename) + } file, err := os.Open(fp.Filename) if err != nil { return nil, err