Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 35 additions & 17 deletions .github/workflows/stale.yml
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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' }}
38 changes: 15 additions & 23 deletions pkg/kernelversion/kernel_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand All @@ -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.
Expand Down
38 changes: 20 additions & 18 deletions pkg/kernelversion/kernel_linux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand Down Expand Up @@ -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) {
Expand Down
Loading