Compare commits
2 Commits
forgejo
...
forgejo-br
Author | SHA1 | Date |
---|---|---|
Loïc Dachary | 2198a47a5a | |
Earl Warren | ae515d7258 |
|
@ -115,6 +115,3 @@ prime/
|
||||||
|
|
||||||
# Manpage
|
# Manpage
|
||||||
/man
|
/man
|
||||||
|
|
||||||
# Generated merged Forgejo+Gitea language files
|
|
||||||
/options/locale/locale_*
|
|
||||||
|
|
14
Makefile
14
Makefile
|
@ -769,14 +769,10 @@ generate: generate-backend
|
||||||
generate-backend: $(TAGS_PREREQ) generate-go
|
generate-backend: $(TAGS_PREREQ) generate-go
|
||||||
|
|
||||||
.PHONY: generate-go
|
.PHONY: generate-go
|
||||||
generate-go: $(TAGS_PREREQ) merge-locales
|
generate-go: $(TAGS_PREREQ)
|
||||||
@echo "Running go generate..."
|
@echo "Running go generate..."
|
||||||
@CC= GOOS= GOARCH= $(GO) generate -tags '$(TAGS)' $(GO_PACKAGES)
|
@CC= GOOS= GOARCH= $(GO) generate -tags '$(TAGS)' $(GO_PACKAGES)
|
||||||
|
|
||||||
.PHONY: merge-locales
|
|
||||||
merge-locales:
|
|
||||||
$(GO) run build/merge-forgejo-locales.go
|
|
||||||
|
|
||||||
.PHONY: security-check
|
.PHONY: security-check
|
||||||
security-check:
|
security-check:
|
||||||
go run $(GOVULNCHECK_PACKAGE) -v ./...
|
go run $(GOVULNCHECK_PACKAGE) -v ./...
|
||||||
|
@ -938,7 +934,13 @@ lockfile-check:
|
||||||
|
|
||||||
.PHONY: update-translations
|
.PHONY: update-translations
|
||||||
update-translations:
|
update-translations:
|
||||||
# noop to detect merge conflicts (potentially needs updating the scripts) and avoid breaking with Gitea
|
mkdir -p ./translations
|
||||||
|
cd ./translations && curl -L https://crowdin.com/download/project/gitea.zip > gitea.zip && unzip gitea.zip
|
||||||
|
rm ./translations/gitea.zip
|
||||||
|
$(SED_INPLACE) -e 's/="/=/g' -e 's/"$$//g' ./translations/*.ini
|
||||||
|
$(SED_INPLACE) -e 's/\\"/"/g' ./translations/*.ini
|
||||||
|
mv ./translations/*.ini ./options/locale/
|
||||||
|
rmdir ./translations
|
||||||
|
|
||||||
.PHONY: generate-license
|
.PHONY: generate-license
|
||||||
generate-license:
|
generate-license:
|
||||||
|
|
|
@ -1,97 +0,0 @@
|
||||||
// Copyright 2022 The Forgejo Authors c/o Codeberg e.V.. All rights reserved.
|
|
||||||
// Use of this source code is governed by a MIT-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
//go:build ignore
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"os"
|
|
||||||
"regexp"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"gopkg.in/ini.v1"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
trimPrefix = "gitea_"
|
|
||||||
sourceFolder = "options/locales/"
|
|
||||||
)
|
|
||||||
|
|
||||||
// returns list of locales, still containing the file extension!
|
|
||||||
func generate_locale_list() []string {
|
|
||||||
localeFiles, _ := os.ReadDir(sourceFolder)
|
|
||||||
locales := []string{}
|
|
||||||
for _, localeFile := range localeFiles {
|
|
||||||
if !localeFile.IsDir() && strings.HasPrefix(localeFile.Name(), trimPrefix) {
|
|
||||||
locales = append(locales, strings.TrimPrefix(localeFile.Name(), trimPrefix))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return locales
|
|
||||||
}
|
|
||||||
|
|
||||||
// replace all occurrences of Gitea with Forgejo
|
|
||||||
func renameGiteaForgejo(filename string) []byte {
|
|
||||||
file, err := os.Open(filename)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
replacer := strings.NewReplacer(
|
|
||||||
"Gitea", "Forgejo",
|
|
||||||
"https://docs.gitea.io/en-us/install-from-binary/", "https://forgejo.org/download/#installation-from-binary",
|
|
||||||
"https://github.com/go-gitea/gitea/tree/master/docker", "https://forgejo.org/download/#container-image",
|
|
||||||
"https://docs.gitea.io/en-us/install-from-package/", "https://forgejo.org/download",
|
|
||||||
"https://code.gitea.io/gitea", "https://forgejo.org/download",
|
|
||||||
"code.gitea.io/gitea", "Forgejo",
|
|
||||||
`<a href="https://github.com/go-gitea/gitea/issues" target="_blank">GitHub</a>`, `<a href="https://codeberg.org/forgejo/forgejo/issues" target="_blank">Codeberg</a>`,
|
|
||||||
"https://github.com/go-gitea/gitea", "https://codeberg.org/forgejo/forgejo",
|
|
||||||
"https://blog.gitea.io", "https://forgejo.org/news",
|
|
||||||
)
|
|
||||||
|
|
||||||
out := make([]byte, 0, 1024)
|
|
||||||
scanner := bufio.NewScanner(file)
|
|
||||||
scanner.Split(bufio.ScanLines)
|
|
||||||
for scanner.Scan() {
|
|
||||||
line := scanner.Text()
|
|
||||||
|
|
||||||
if strings.HasPrefix(line, "license_desc=") {
|
|
||||||
line = strings.Replace(line, "GitHub", "Forgejo", 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
if strings.HasPrefix(line, "[") && strings.HasSuffix(line, "]") {
|
|
||||||
out = append(out, []byte("\n"+line+"\n")...)
|
|
||||||
} else if strings.HasPrefix(line, "settings.web_hook_name_gitea") {
|
|
||||||
out = append(out, []byte("\n"+line+"\n")...)
|
|
||||||
out = append(out, []byte("settings.web_hook_name_forgejo = Forgejo\n")...)
|
|
||||||
} else if strings.HasPrefix(line, "migrate.gitea.description") {
|
|
||||||
re := regexp.MustCompile(`(.*Gitea)`)
|
|
||||||
out = append(out, []byte(re.ReplaceAllString(line, "${1}/Forgejo")+"\n")...)
|
|
||||||
} else {
|
|
||||||
out = append(out, []byte(replacer.Replace(line)+"\n")...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file.Close()
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
locales := generate_locale_list()
|
|
||||||
var err error
|
|
||||||
var localeFile *ini.File
|
|
||||||
for _, locale := range locales {
|
|
||||||
giteaLocale := sourceFolder + "gitea_" + locale
|
|
||||||
localeFile, err = ini.LoadSources(ini.LoadOptions{
|
|
||||||
IgnoreInlineComment: true,
|
|
||||||
}, giteaLocale, renameGiteaForgejo(giteaLocale))
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
err = localeFile.SaveTo("options/locale/locale_" + locale)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2222,7 +2222,6 @@ ROUTER = console
|
||||||
;ENABLE_SUCCESS_NOTICE = false
|
;ENABLE_SUCCESS_NOTICE = false
|
||||||
;SCHEDULE = @every 168h
|
;SCHEDULE = @every 168h
|
||||||
;HTTP_ENDPOINT = https://dl.gitea.io/gitea/version.json
|
;HTTP_ENDPOINT = https://dl.gitea.io/gitea/version.json
|
||||||
;DOMAIN_ENDPOINT = release.forgejo.org
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
|
@ -1053,7 +1053,6 @@ Default templates for project boards:
|
||||||
- `ENABLE_SUCCESS_NOTICE`: **true**: Set to false to switch off success notices.
|
- `ENABLE_SUCCESS_NOTICE`: **true**: Set to false to switch off success notices.
|
||||||
- `SCHEDULE`: **@every 168h**: Cron syntax for scheduling a work, e.g. `@every 168h`.
|
- `SCHEDULE`: **@every 168h**: Cron syntax for scheduling a work, e.g. `@every 168h`.
|
||||||
- `HTTP_ENDPOINT`: **https://dl.gitea.io/gitea/version.json**: the endpoint that Gitea will check for newer versions
|
- `HTTP_ENDPOINT`: **https://dl.gitea.io/gitea/version.json**: the endpoint that Gitea will check for newer versions
|
||||||
- `DOMAIN_ENDPOINT`: **release.forgejo.org**: the domain that, if specified, Gitea will check for newer versions. This is preferred over `HTTP_ENDPOINT`.
|
|
||||||
|
|
||||||
#### Cron - Delete all old system notices from database ('cron.delete_old_system_notices')
|
#### Cron - Delete all old system notices from database ('cron.delete_old_system_notices')
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,8 @@
|
||||||
package updatechecker
|
package updatechecker
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"io"
|
"io"
|
||||||
"net"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/json"
|
"code.gitea.io/gitea/modules/json"
|
||||||
"code.gitea.io/gitea/modules/proxy"
|
"code.gitea.io/gitea/modules/proxy"
|
||||||
|
@ -29,51 +26,7 @@ func (r *CheckerState) Name() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GiteaUpdateChecker returns error when new version of Gitea is available
|
// GiteaUpdateChecker returns error when new version of Gitea is available
|
||||||
func GiteaUpdateChecker(httpEndpoint, domainEndpoint string) error {
|
func GiteaUpdateChecker(httpEndpoint string) error {
|
||||||
var version string
|
|
||||||
var err error
|
|
||||||
if domainEndpoint != "" {
|
|
||||||
version, err = getVersionDNS(domainEndpoint)
|
|
||||||
} else {
|
|
||||||
version, err = getVersionHTTP(httpEndpoint)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return UpdateRemoteVersion(version)
|
|
||||||
}
|
|
||||||
|
|
||||||
// getVersionDNS will request the TXT records for the domain. If a record starts
|
|
||||||
// with "forgejo_versions=" everything after that will be used as the latest
|
|
||||||
// version available.
|
|
||||||
func getVersionDNS(domainEndpoint string) (version string, err error) {
|
|
||||||
records, err := net.LookupTXT(domainEndpoint)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(records) == 0 {
|
|
||||||
return "", errors.New("no TXT records were found")
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, record := range records {
|
|
||||||
if strings.HasPrefix(record, "forgejo_versions=") {
|
|
||||||
// Get all supported versions, separated by a comma.
|
|
||||||
supportedVersions := strings.Split(strings.TrimPrefix(record, "forgejo_versions="), ",")
|
|
||||||
// For now always return the latest supported version.
|
|
||||||
return supportedVersions[len(supportedVersions)-1], nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return "", errors.New("there is no TXT record with a valid value")
|
|
||||||
}
|
|
||||||
|
|
||||||
// getVersionHTTP will make an HTTP request to the endpoint, and the returned
|
|
||||||
// content is JSON. The "latest.version" path's value will be used as the latest
|
|
||||||
// version available.
|
|
||||||
func getVersionHTTP(httpEndpoint string) (version string, err error) {
|
|
||||||
httpClient := &http.Client{
|
httpClient := &http.Client{
|
||||||
Transport: &http.Transport{
|
Transport: &http.Transport{
|
||||||
Proxy: proxy.Proxy(),
|
Proxy: proxy.Proxy(),
|
||||||
|
@ -82,16 +35,16 @@ func getVersionHTTP(httpEndpoint string) (version string, err error) {
|
||||||
|
|
||||||
req, err := http.NewRequest("GET", httpEndpoint, nil)
|
req, err := http.NewRequest("GET", httpEndpoint, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return err
|
||||||
}
|
}
|
||||||
resp, err := httpClient.Do(req)
|
resp, err := httpClient.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return err
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
body, err := io.ReadAll(resp.Body)
|
body, err := io.ReadAll(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
type respType struct {
|
type respType struct {
|
||||||
|
@ -102,9 +55,10 @@ func getVersionHTTP(httpEndpoint string) (version string, err error) {
|
||||||
respData := respType{}
|
respData := respType{}
|
||||||
err = json.Unmarshal(body, &respData)
|
err = json.Unmarshal(body, &respData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return err
|
||||||
}
|
}
|
||||||
return respData.Latest.Version, nil
|
|
||||||
|
return UpdateRemoteVersion(respData.Latest.Version)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateRemoteVersion updates the latest available version of Gitea
|
// UpdateRemoteVersion updates the latest available version of Gitea
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
// Copyright 2023 The Forgejo Authors. All rights reserved.
|
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
package updatechecker
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestDNSUpdate(t *testing.T) {
|
|
||||||
version, err := getVersionDNS("release.forgejo.org")
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.NotEmpty(t, version)
|
|
||||||
}
|
|
|
@ -142,20 +142,18 @@ func registerDeleteOldActions() {
|
||||||
func registerUpdateGiteaChecker() {
|
func registerUpdateGiteaChecker() {
|
||||||
type UpdateCheckerConfig struct {
|
type UpdateCheckerConfig struct {
|
||||||
BaseConfig
|
BaseConfig
|
||||||
HTTPEndpoint string
|
HTTPEndpoint string
|
||||||
DomainEndpoint string
|
|
||||||
}
|
}
|
||||||
RegisterTaskFatal("update_checker", &UpdateCheckerConfig{
|
RegisterTaskFatal("update_checker", &UpdateCheckerConfig{
|
||||||
BaseConfig: BaseConfig{
|
BaseConfig: BaseConfig{
|
||||||
Enabled: false,
|
Enabled: true,
|
||||||
RunAtStart: false,
|
RunAtStart: false,
|
||||||
Schedule: "@every 168h",
|
Schedule: "@every 168h",
|
||||||
},
|
},
|
||||||
HTTPEndpoint: "https://dl.gitea.io/gitea/version.json",
|
HTTPEndpoint: "https://dl.gitea.io/gitea/version.json",
|
||||||
DomainEndpoint: "release.forgejo.org",
|
|
||||||
}, func(ctx context.Context, _ *user_model.User, config Config) error {
|
}, func(ctx context.Context, _ *user_model.User, config Config) error {
|
||||||
updateCheckerConfig := config.(*UpdateCheckerConfig)
|
updateCheckerConfig := config.(*UpdateCheckerConfig)
|
||||||
return updatechecker.GiteaUpdateChecker(updateCheckerConfig.HTTPEndpoint, updateCheckerConfig.DomainEndpoint)
|
return updatechecker.GiteaUpdateChecker(updateCheckerConfig.HTTPEndpoint)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -181,7 +181,7 @@
|
||||||
{{svg "octicon-tools"}}
|
{{svg "octicon-tools"}}
|
||||||
{{.locale.Tr "your_settings"}}<!-- Your settings -->
|
{{.locale.Tr "your_settings"}}<!-- Your settings -->
|
||||||
</a>
|
</a>
|
||||||
<a class="item" target="_blank" rel="noopener noreferrer" href="https://forgejo.org/docs/admin/">
|
<a class="item" target="_blank" rel="noopener noreferrer" href="https://forgejo.org/docs/latest/">
|
||||||
{{svg "octicon-question"}}
|
{{svg "octicon-question"}}
|
||||||
{{.locale.Tr "help"}}<!-- Help -->
|
{{.locale.Tr "help"}}<!-- Help -->
|
||||||
</a>
|
</a>
|
||||||
|
@ -203,7 +203,7 @@
|
||||||
</div><!-- end dropdown avatar menu -->
|
</div><!-- end dropdown avatar menu -->
|
||||||
</div><!-- end signed user right menu -->
|
</div><!-- end signed user right menu -->
|
||||||
{{else}}
|
{{else}}
|
||||||
<a class="item" target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io">{{.locale.Tr "help"}}</a>
|
<a class="item" target="_blank" rel="noopener noreferrer" href="https://forgejo.org/docs/latest/">{{.locale.Tr "help"}}</a>
|
||||||
<div class="right stackable menu">
|
<div class="right stackable menu">
|
||||||
{{if .ShowRegistrationButton}}
|
{{if .ShowRegistrationButton}}
|
||||||
<a class="item{{if .PageIsSignUp}} active{{end}}" href="{{AppSubUrl}}/user/sign_up">
|
<a class="item{{if .PageIsSignUp}} active{{end}}" href="{{AppSubUrl}}/user/sign_up">
|
||||||
|
|
Reference in New Issue