diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 6aa13cf6c8d38..e1b07713052ab 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,10 +1,10 @@ -name: 'Close stale issues and PRs' +name: "Close stale issues and PRs" on: schedule: - cron: "0 0 * * *" # Every day at midnight pull_request: paths: - - '.github/workflows/stale.yml' + - ".github/workflows/stale.yml" permissions: contents: read @@ -23,19 +23,37 @@ jobs: - uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0 # All stale bot options: https://github.com/actions/stale#all-options with: - # Idle number of days before marking issues/PRs stale - days-before-stale: 90 - # Idle number of days before closing stale issues/PRs - days-before-close: 7 - # Only issues/PRs with ANY of these labels are checked - any-of-labels: 'status/more-info-needed,status/needs-update,needs-rebase' - # Comment on the staled issues - stale-issue-message: 'This issue is stale because it has been open 90 days with no activity. This issue will be closed in 7 days unless new comments are made or the stale label is removed.' - # Comment on the staled PRs - stale-pr-message: 'This PR is stale because it has been open 90 days with no activity. This PR will be closed in 7 days unless new comments are made or the stale label is removed.' - # Comment on the staled issues while closed - close-issue-message: 'This issue was closed because it has been stalled for 7 days with no activity.' - # Comment on the staled PRs while closed - close-pr-message: 'This PR was closed because it has been stalled for 7 days with no activity.' + # Issues: stale after 12 months, close after 2 weeks + days-before-issue-stale: 365 + days-before-issue-close: 14 + # PRs: stale after 6 months, close after 2 weeks + days-before-pr-stale: 180 + days-before-pr-close: 14 + + stale-issue-label: "Stale" + stale-pr-label: "Stale" + + # Exempt if assigned to a milestone + exempt-all-issue-milestones: true + exempt-all-pr-milestones: true + + # Messages + stale-issue-message: > + This issue has not been updated in 12 months and is now marked as stale. + It will be closed in 2 weeks unless there is new activity or it is + assigned to a milestone. + close-issue-message: > + This issue was closed because it has been stale for 2 weeks with no activity. + Feel free to reopen or create a new issue if you would like to continue + working on it. + stale-pr-message: > + This PR has not been updated in 6 months and is now marked as stale. + It will be closed in 2 weeks unless there is new activity or it is + assigned to a milestone. + close-pr-message: > + This PR was closed because it has been stale for 2 weeks with no activity. + Feel free to reopen or create a new PR if you would like to continue + working on it. + # Enable dry-run when changing this file from a PR. - debug-only: github.event_name == 'pull_request' + debug-only: ${{ github.event_name == 'pull_request' }} diff --git a/pkg/kernelversion/kernel_linux.go b/pkg/kernelversion/kernel_linux.go index a8cec6481f986..153f71e1c9bf6 100644 --- a/pkg/kernelversion/kernel_linux.go +++ b/pkg/kernelversion/kernel_linux.go @@ -14,15 +14,16 @@ limitations under the License. */ -/* - File copied and customized based on - https://github.com/moby/moby/tree/v20.10.14/profiles/seccomp/kernel_linux.go -*/ +// SPDX-FileCopyrightText: Copyright The containerd Authors +// SPDX-FileCopyrightText: Copyright The Moby Authors +// SPDX-License-Identifier: Apache-2.0 +// +// File copied and customized based on +// https://github.com/moby/profiles/blob/seccomp/v0.2.3/seccomp/kernel_linux.go package kernelversion import ( - "bytes" "fmt" "sync" @@ -43,28 +44,19 @@ func (k *KernelVersion) String() string { return "" } -var ( - currentKernelVersion *KernelVersion - kernelVersionError error - once sync.Once -) - // getKernelVersion gets the current kernel version. -func getKernelVersion() (*KernelVersion, error) { - once.Do(func() { - var uts unix.Utsname - if err := unix.Uname(&uts); err != nil { - return - } - // Remove the \x00 from the release for Atoi to parse correctly - currentKernelVersion, kernelVersionError = parseRelease(string(uts.Release[:bytes.IndexByte(uts.Release[:], 0)])) - }) - return currentKernelVersion, kernelVersionError -} +var getKernelVersion = sync.OnceValues(func() (*KernelVersion, error) { + var uts unix.Utsname + if err := unix.Uname(&uts); err != nil { + return nil, err + } + // Convert the NUL-terminated release field before parsing. + return parseRelease(unix.ByteSliceToString(uts.Release[:])) +}) // parseRelease parses a string and creates a KernelVersion based on it. func parseRelease(release string) (*KernelVersion, error) { - var version = KernelVersion{} + var version KernelVersion // We're only make sure we get the "kernel" and "major revision". Sometimes we have // 3.12.25-gentoo, but sometimes we just have 3.12-1-amd64. diff --git a/pkg/kernelversion/kernel_linux_test.go b/pkg/kernelversion/kernel_linux_test.go index 8f21feef2069c..8c78485590284 100644 --- a/pkg/kernelversion/kernel_linux_test.go +++ b/pkg/kernelversion/kernel_linux_test.go @@ -14,15 +14,17 @@ limitations under the License. */ -/* - File copied and customized based on - https://github.com/moby/moby/tree/v20.10.14/profiles/seccomp/kernel_linux_test.go -*/ +// SPDX-FileCopyrightText: Copyright The containerd Authors +// SPDX-FileCopyrightText: Copyright The Moby Authors +// SPDX-License-Identifier: Apache-2.0 +// +// File copied and customized based on +// https://github.com/moby/profiles/blob/seccomp/v0.2.3/seccomp/kernel_linux_test.go package kernelversion import ( - "fmt" + "errors" "testing" ) @@ -55,19 +57,19 @@ func TestParseRelease(t *testing.T) { {in: "3.12-1-amd64", out: KernelVersion{Kernel: 3, Major: 12}}, {in: "3.12foobar", out: KernelVersion{Kernel: 3, Major: 12}}, {in: "99.999.999-19-generic", out: KernelVersion{Kernel: 99, Major: 999}}, - {in: "", expectedErr: fmt.Errorf(`failed to parse kernel version "": EOF`)}, - {in: "3", expectedErr: fmt.Errorf(`failed to parse kernel version "3": unexpected EOF`)}, - {in: "3.", expectedErr: fmt.Errorf(`failed to parse kernel version "3.": EOF`)}, - {in: "3a", expectedErr: fmt.Errorf(`failed to parse kernel version "3a": input does not match format`)}, - {in: "3.a", expectedErr: fmt.Errorf(`failed to parse kernel version "3.a": expected integer`)}, - {in: "a", expectedErr: fmt.Errorf(`failed to parse kernel version "a": expected integer`)}, - {in: "a.a", expectedErr: fmt.Errorf(`failed to parse kernel version "a.a": expected integer`)}, - {in: "a.a.a-a", expectedErr: fmt.Errorf(`failed to parse kernel version "a.a.a-a": expected integer`)}, - {in: "-3", expectedErr: fmt.Errorf(`failed to parse kernel version "-3": expected integer`)}, - {in: "-3.", expectedErr: fmt.Errorf(`failed to parse kernel version "-3.": expected integer`)}, - {in: "-3.8", expectedErr: fmt.Errorf(`failed to parse kernel version "-3.8": expected integer`)}, - {in: "-3.-8", expectedErr: fmt.Errorf(`failed to parse kernel version "-3.-8": expected integer`)}, - {in: "3.-8", expectedErr: fmt.Errorf(`failed to parse kernel version "3.-8": expected integer`)}, + {in: "", expectedErr: errors.New(`failed to parse kernel version "": EOF`)}, + {in: "3", expectedErr: errors.New(`failed to parse kernel version "3": unexpected EOF`)}, + {in: "3.", expectedErr: errors.New(`failed to parse kernel version "3.": EOF`)}, + {in: "3a", expectedErr: errors.New(`failed to parse kernel version "3a": input does not match format`)}, + {in: "3.a", expectedErr: errors.New(`failed to parse kernel version "3.a": expected integer`)}, + {in: "a", expectedErr: errors.New(`failed to parse kernel version "a": expected integer`)}, + {in: "a.a", expectedErr: errors.New(`failed to parse kernel version "a.a": expected integer`)}, + {in: "a.a.a-a", expectedErr: errors.New(`failed to parse kernel version "a.a.a-a": expected integer`)}, + {in: "-3", expectedErr: errors.New(`failed to parse kernel version "-3": expected integer`)}, + {in: "-3.", expectedErr: errors.New(`failed to parse kernel version "-3.": expected integer`)}, + {in: "-3.8", expectedErr: errors.New(`failed to parse kernel version "-3.8": expected integer`)}, + {in: "-3.-8", expectedErr: errors.New(`failed to parse kernel version "-3.-8": expected integer`)}, + {in: "3.-8", expectedErr: errors.New(`failed to parse kernel version "3.-8": expected integer`)}, } for _, tc := range tests { t.Run(tc.in, func(t *testing.T) {