Git with a cup of tea, painless self-hosted git service
Mirror for internal git.with.parts use
https://git.with.parts
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Use UTC as default timezone when schedule Actions cron tasks (#31742)
Fix #31657.
According to the
[doc](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#onschedule)
of GitHub Actions, The timezone for cron should be UTC, not the local
timezone. And Gitea Actions doesn't have any reasons to change this, so
I think it's a bug.
However, Gitea Actions has extended the syntax, as it supports
descriptors like `@weekly` and `@every 5m`, and supports specifying the
timezone like `TZ=UTC 0 10 * * *`. So we can make it use UTC only when
the timezone is not specified, to be compatible with GitHub Actions, and
also respect the user's specified.
It does break the feature because the times to run tasks would be
changed, and it may confuse users. So I don't think we should backport
this.
## ⚠️ BREAKING ⚠️
If the server's local time zone is not UTC, a scheduled task would run
at a different time after upgrading Gitea to this version.
4 months ago
|
|
|
// Copyright 2024 The Gitea Authors. All rights reserved.
|
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
|
|
|
|
package actions
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"code.gitea.io/gitea/modules/test"
|
|
|
|
|
Use UTC as default timezone when schedule Actions cron tasks (#31742)
Fix #31657.
According to the
[doc](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#onschedule)
of GitHub Actions, The timezone for cron should be UTC, not the local
timezone. And Gitea Actions doesn't have any reasons to change this, so
I think it's a bug.
However, Gitea Actions has extended the syntax, as it supports
descriptors like `@weekly` and `@every 5m`, and supports specifying the
timezone like `TZ=UTC 0 10 * * *`. So we can make it use UTC only when
the timezone is not specified, to be compatible with GitHub Actions, and
also respect the user's specified.
It does break the feature because the times to run tasks would be
changed, and it may confuse users. So I don't think we should backport
this.
## ⚠️ BREAKING ⚠️
If the server's local time zone is not UTC, a scheduled task would run
at a different time after upgrading Gitea to this version.
4 months ago
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestActionScheduleSpec_Parse(t *testing.T) {
|
|
|
|
// Mock the local timezone is not UTC
|
|
|
|
tz, err := time.LoadLocation("Asia/Shanghai")
|
|
|
|
require.NoError(t, err)
|
|
|
|
defer test.MockVariableValue(&time.Local, tz)()
|
Use UTC as default timezone when schedule Actions cron tasks (#31742)
Fix #31657.
According to the
[doc](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#onschedule)
of GitHub Actions, The timezone for cron should be UTC, not the local
timezone. And Gitea Actions doesn't have any reasons to change this, so
I think it's a bug.
However, Gitea Actions has extended the syntax, as it supports
descriptors like `@weekly` and `@every 5m`, and supports specifying the
timezone like `TZ=UTC 0 10 * * *`. So we can make it use UTC only when
the timezone is not specified, to be compatible with GitHub Actions, and
also respect the user's specified.
It does break the feature because the times to run tasks would be
changed, and it may confuse users. So I don't think we should backport
this.
## ⚠️ BREAKING ⚠️
If the server's local time zone is not UTC, a scheduled task would run
at a different time after upgrading Gitea to this version.
4 months ago
|
|
|
|
|
|
|
now, err := time.Parse(time.RFC3339, "2024-07-31T15:47:55+08:00")
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
tests := []struct {
|
|
|
|
name string
|
|
|
|
spec string
|
|
|
|
want string
|
|
|
|
wantErr assert.ErrorAssertionFunc
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
name: "regular",
|
|
|
|
spec: "0 10 * * *",
|
|
|
|
want: "2024-07-31T10:00:00Z",
|
|
|
|
wantErr: assert.NoError,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "invalid",
|
|
|
|
spec: "0 10 * *",
|
|
|
|
want: "",
|
|
|
|
wantErr: assert.Error,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "with timezone",
|
|
|
|
spec: "TZ=America/New_York 0 10 * * *",
|
|
|
|
want: "2024-07-31T14:00:00Z",
|
|
|
|
wantErr: assert.NoError,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "timezone irrelevant",
|
|
|
|
spec: "@every 5m",
|
|
|
|
want: "2024-07-31T07:52:55Z",
|
|
|
|
wantErr: assert.NoError,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
s := &ActionScheduleSpec{
|
|
|
|
Spec: tt.spec,
|
|
|
|
}
|
|
|
|
got, err := s.Parse()
|
|
|
|
tt.wantErr(t, err)
|
|
|
|
|
|
|
|
if err == nil {
|
|
|
|
assert.Equal(t, tt.want, got.Next(now).UTC().Format(time.RFC3339))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|