diff --git a/.github/workflows/dep-auto-merge.yml b/.github/workflows/dep-auto-merge.yml index fc26472..cf8d766 100644 --- a/.github/workflows/dep-auto-merge.yml +++ b/.github/workflows/dep-auto-merge.yml @@ -7,20 +7,24 @@ on: workflow_dispatch: permissions: + contents: write pull-requests: write - issues: write - repository-projects: write jobs: automerge: runs-on: ubuntu-latest if: github.actor == 'dependabot[bot]' steps: - - uses: actions/checkout@v3 - with: - token: ${{ secrets.DEPENDABOT_PAT }} + - uses: actions/checkout@v4 - - uses: ahmadnassri/action-dependabot-auto-merge@v2 - with: - github-token: ${{ secrets.DEPENDABOT_PAT }} - target: all \ No newline at end of file + - name: Enable auto-merge + run: gh pr merge --auto --squash "$PR_URL" + env: + PR_URL: ${{ github.event.pull_request.html_url }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Approve PR + run: gh pr review --approve "$PR_URL" + env: + PR_URL: ${{ github.event.pull_request.html_url }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/go.mod b/go.mod index c8bb423..634f825 100644 --- a/go.mod +++ b/go.mod @@ -3,13 +3,14 @@ module github.com/projectdiscovery/ratelimit go 1.24.0 require ( - github.com/projectdiscovery/utils v0.4.22 - github.com/stretchr/testify v1.10.0 + github.com/projectdiscovery/utils v0.9.0 + github.com/stretchr/testify v1.11.1 golang.org/x/time v0.5.0 ) require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index ba9032e..de48c91 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,17 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/projectdiscovery/utils v0.4.22 h1:OO3FU2uX967sQxu5JtpdBZNzOevvKHAhWqkoTGl+C0A= -github.com/projectdiscovery/utils v0.4.22/go.mod h1:3l84gpCwL9KG1/ZmslOBABCrk84CcpGWJZfR8wZysR4= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/projectdiscovery/utils v0.9.0 h1:eu9vdbP0VYXI9nGSLfnOpUqBeW9/B/iSli7U8gPKZw8= +github.com/projectdiscovery/utils v0.9.0/go.mod h1:zcVu1QTlMi5763qCol/L3ROnbd/UPSBP8fI5PmcnF6s= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 h1:yqrTHse8TCMW1M1ZCP+VAR/l0kKxwaAIqN/il7x4voA= +golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= diff --git a/keyratelimit.go b/keyratelimit.go index 742474a..fdfefc4 100644 --- a/keyratelimit.go +++ b/keyratelimit.go @@ -5,12 +5,12 @@ import ( "sync" "time" - errorutil "github.com/projectdiscovery/utils/errors" + "github.com/projectdiscovery/utils/errkit" ) var ( - ErrKeyAlreadyExists = errorutil.NewWithTag("MultiLimiter", "key already exists") - ErrKeyMissing = errorutil.NewWithTag("MultiLimiter", "key does not exist") + ErrKeyAlreadyExists = errkit.New("multilimiter: key already exists") + ErrKeyMissing = errkit.New("multilimiter: key does not exist") ) // Options of MultiLimiter @@ -25,13 +25,13 @@ type Options struct { func (o *Options) Validate() error { if !o.IsUnlimited { if o.Key == "" { - return errorutil.NewWithTag("MultiLimiter", "empty keys not allowed") + return errkit.New("multilimiter: empty keys not allowed") } if o.MaxCount == 0 { - return errorutil.NewWithTag("MultiLimiter", "maxcount cannot be zero") + return errkit.New("multilimiter: maxcount cannot be zero") } if o.Duration == 0 { - return errorutil.NewWithTag("MultiLimiter", "time duration not set") + return errkit.New("multilimiter: time duration not set") } } return nil @@ -57,7 +57,7 @@ func (m *MultiLimiter) Add(opts *Options) error { // ok is true if key already exists _, ok := m.limiters.LoadOrStore(opts.Key, rlimiter) if ok { - return ErrKeyAlreadyExists.Msgf("key: %v", opts.Key) + return errkit.Wrapf(ErrKeyAlreadyExists, "key: %v", opts.Key) } return nil } @@ -122,12 +122,12 @@ func (m *MultiLimiter) Stop(keys ...string) { func (m *MultiLimiter) get(key string) (*Limiter, error) { val, _ := m.limiters.Load(key) if val == nil { - return nil, ErrKeyMissing.Msgf("key: %v", key) + return nil, errkit.Wrapf(ErrKeyMissing, "key: %v", key) } if limiter, ok := val.(*Limiter); ok { return limiter, nil } - return nil, errorutil.NewWithTag("MultiLimiter", "type assertion of rateLimiter failed in multiLimiter") + return nil, errkit.New("multilimiter: type assertion of rateLimiter failed") } // NewMultiLimiter : Limits diff --git a/keyratelimit_test.go b/keyratelimit_test.go index a2c00d0..e4bedf4 100644 --- a/keyratelimit_test.go +++ b/keyratelimit_test.go @@ -19,7 +19,7 @@ func TestMultiLimiter(t *testing.T) { }) require.Nil(t, err) wg := &sync.WaitGroup{} - expectedTime := (time.Duration(6) * time.Second).Round(time.Millisecond) + expectedTime := time.Duration(6)*time.Second - 50*time.Millisecond wg.Add(1) go func() { diff --git a/ratelimit_test.go b/ratelimit_test.go index f9357a9..f8fbc7e 100644 --- a/ratelimit_test.go +++ b/ratelimit_test.go @@ -82,7 +82,7 @@ func TestRateLimit(t *testing.T) { limiter.Take() } timetaken := time.Since(startTime) - expected := time.Duration(6) * time.Second + expected := time.Duration(6)*time.Second - 50*time.Millisecond require.GreaterOrEqualf(t, timetaken.Nanoseconds(), expected.Nanoseconds(), "more tokens sent than expected with ratelimit") })