From 85ea22e9d0756a779ae45958a0488eddee130c3e Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 11 Jan 2023 17:14:27 +0800 Subject: [PATCH 01/10] Add unit test coverage requirements for some packages --- .drone.yml | 865 ------------------------- Makefile | 8 +- build/{gocovmerge.go => gocoverage.go} | 131 +++- 3 files changed, 134 insertions(+), 870 deletions(-) delete mode 100644 .drone.yml rename build/{gocovmerge.go => gocoverage.go} (53%) diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index 4e7789ef92331..0000000000000 --- a/.drone.yml +++ /dev/null @@ -1,865 +0,0 @@ ---- -kind: pipeline -type: docker -name: release-latest - -platform: - os: linux - arch: amd64 - -workspace: - base: /source - path: / - -trigger: - branch: - - main - - "release/*" - event: - - push - paths: - exclude: - - "docs/**" - -volumes: - - name: deps - temp: {} - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git fetch --tags --force - - - name: deps-frontend - image: node:20 - pull: always - commands: - - make deps-frontend - - - name: deps-backend - image: gitea/test_env:linux-1.20-amd64 - pull: always - commands: - - make deps-backend - volumes: - - name: deps - path: /go - - - name: static - image: techknowlogick/xgo:go-1.20.x - pull: always - commands: - # Upgrade to node 20 once https://github.com/techknowlogick/xgo/issues/163 is resolved - - curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get -qqy install nodejs - - export PATH=$PATH:$GOPATH/bin - - make release - environment: - GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not - TAGS: bindata sqlite sqlite_unlock_notify - DEBIAN_FRONTEND: noninteractive - volumes: - - name: deps - path: /go - - - name: gpg-sign - image: plugins/gpgsign:1 - pull: always - settings: - detach_sign: true - excludes: - - "dist/release/*.sha256" - files: - - "dist/release/*" - environment: - GPGSIGN_KEY: - from_secret: gpgsign_key - GPGSIGN_PASSPHRASE: - from_secret: gpgsign_passphrase - - - name: release-branch - image: woodpeckerci/plugin-s3:latest - pull: always - settings: - acl: - from_secret: aws_s3_acl - region: - from_secret: aws_s3_region - bucket: - from_secret: aws_s3_bucket - endpoint: - from_secret: aws_s3_endpoint - path_style: - from_secret: aws_s3_path_style - source: "dist/release/*" - strip_prefix: dist/release/ - target: "/gitea/${DRONE_BRANCH##release/v}" - environment: - AWS_ACCESS_KEY_ID: - from_secret: aws_access_key_id - AWS_SECRET_ACCESS_KEY: - from_secret: aws_secret_access_key - when: - branch: - - "release/*" - event: - - push - - - name: release-main - image: woodpeckerci/plugin-s3:latest - settings: - acl: - from_secret: aws_s3_acl - region: - from_secret: aws_s3_region - bucket: - from_secret: aws_s3_bucket - endpoint: - from_secret: aws_s3_endpoint - path_style: - from_secret: aws_s3_path_style - source: "dist/release/*" - strip_prefix: dist/release/ - target: /gitea/main - environment: - AWS_ACCESS_KEY_ID: - from_secret: aws_access_key_id - AWS_SECRET_ACCESS_KEY: - from_secret: aws_secret_access_key - when: - branch: - - main - event: - - push - ---- -kind: pipeline -name: release-version - -platform: - os: linux - arch: amd64 - -workspace: - base: /source - path: / - -trigger: - event: - - tag - -volumes: - - name: deps - temp: {} - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git fetch --tags --force - - - name: deps-frontend - image: node:20 - pull: always - commands: - - make deps-frontend - - - name: deps-backend - image: gitea/test_env:linux-1.20-amd64 - pull: always - commands: - - make deps-backend - volumes: - - name: deps - path: /go - - - name: static - image: techknowlogick/xgo:go-1.20.x - pull: always - commands: - # Upgrade to node 20 once https://github.com/techknowlogick/xgo/issues/163 is resolved - - curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get -qqy install nodejs - - export PATH=$PATH:$GOPATH/bin - - make release - environment: - GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not - TAGS: bindata sqlite sqlite_unlock_notify - DEBIAN_FRONTEND: noninteractive - depends_on: [fetch-tags] - volumes: - - name: deps - path: /go - - - name: gpg-sign - image: plugins/gpgsign:1 - pull: always - settings: - detach_sign: true - excludes: - - "dist/release/*.sha256" - files: - - "dist/release/*" - environment: - GPGSIGN_KEY: - from_secret: gpgsign_key - GPGSIGN_PASSPHRASE: - from_secret: gpgsign_passphrase - depends_on: [static] - - - name: release-tag - image: woodpeckerci/plugin-s3:latest - pull: always - settings: - acl: - from_secret: aws_s3_acl - region: - from_secret: aws_s3_region - bucket: - from_secret: aws_s3_bucket - endpoint: - from_secret: aws_s3_endpoint - path_style: - from_secret: aws_s3_path_style - source: "dist/release/*" - strip_prefix: dist/release/ - target: "/gitea/${DRONE_TAG##v}" - environment: - AWS_ACCESS_KEY_ID: - from_secret: aws_access_key_id - AWS_SECRET_ACCESS_KEY: - from_secret: aws_secret_access_key - depends_on: [gpg-sign] - - - name: github - image: plugins/github-release:latest - pull: always - settings: - files: - - "dist/release/*" - file_exists: overwrite - environment: - GITHUB_TOKEN: - from_secret: github_token - depends_on: [gpg-sign] - ---- -kind: pipeline -type: docker -name: docker-linux-amd64-release-version - -platform: - os: linux - arch: amd64 - -trigger: - ref: - include: - - "refs/tags/**" - exclude: - - "refs/tags/**-rc*" - paths: - exclude: - - "docs/**" - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git fetch --tags --force - - - name: publish - image: plugins/docker:latest - pull: always - settings: - auto_tag: true - auto_tag_suffix: linux-amd64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: plugins/docker:latest - settings: - dockerfile: Dockerfile.rootless - auto_tag: true - auto_tag_suffix: linux-amd64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request ---- - -kind: pipeline -type: docker -name: docker-linux-amd64-release-candidate-version - -platform: - os: linux - arch: amd64 - -trigger: - ref: - - "refs/tags/**-rc*" - paths: - exclude: - - "docs/**" - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git fetch --tags --force - - - name: publish - image: plugins/docker:latest - pull: always - settings: - tags: ${DRONE_TAG##v}-linux-amd64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: plugins/docker:latest - settings: - dockerfile: Dockerfile.rootless - tags: ${DRONE_TAG##v}-linux-amd64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - ---- -kind: pipeline -type: docker -name: docker-linux-amd64-release - -platform: - os: linux - arch: amd64 - -trigger: - ref: - - refs/heads/main - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git fetch --tags --force - - - name: publish - image: plugins/docker:latest - pull: always - settings: - auto_tag: false - tags: nightly-linux-amd64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: plugins/docker:latest - settings: - dockerfile: Dockerfile.rootless - auto_tag: false - tags: nightly-linux-amd64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - ---- -kind: pipeline -name: docker-linux-amd64-release-branch - -platform: - os: linux - arch: amd64 - -trigger: - ref: - - "refs/heads/release/v*" - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git fetch --tags --force - - - name: publish - image: plugins/docker:latest - pull: always - settings: - auto_tag: false - tags: ${DRONE_BRANCH##release/v}-nightly-linux-amd64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: plugins/docker:latest - settings: - dockerfile: Dockerfile.rootless - auto_tag: false - tags: ${DRONE_BRANCH##release/v}-nightly-linux-amd64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - ---- -kind: pipeline -type: docker -name: docker-linux-arm64-release-version - -platform: - os: linux - arch: arm64 - -trigger: - ref: - include: - - "refs/tags/**" - exclude: - - "refs/tags/**-rc*" - paths: - exclude: - - "docs/**" - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git fetch --tags --force - - - name: publish - image: plugins/docker:latest - pull: always - settings: - auto_tag: true - auto_tag_suffix: linux-arm64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: plugins/docker:latest - settings: - dockerfile: Dockerfile.rootless - auto_tag: true - auto_tag_suffix: linux-arm64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - ---- -kind: pipeline -type: docker -name: docker-linux-arm64-release-candidate-version - -platform: - os: linux - arch: arm64 - -trigger: - ref: - - "refs/tags/**-rc*" - paths: - exclude: - - "docs/**" - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git fetch --tags --force - - - name: publish - image: plugins/docker:latest - pull: always - settings: - tags: ${DRONE_TAG##v}-linux-arm64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: plugins/docker:latest - settings: - dockerfile: Dockerfile.rootless - tags: ${DRONE_TAG##v}-linux-arm64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - ---- -kind: pipeline -type: docker -name: docker-linux-arm64-release - -platform: - os: linux - arch: arm64 - -trigger: - ref: - - refs/heads/main - paths: - exclude: - - "docs/**" - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git fetch --tags --force - - - name: publish - image: plugins/docker:latest - pull: always - settings: - auto_tag: false - tags: nightly-linux-arm64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: plugins/docker:latest - settings: - dockerfile: Dockerfile.rootless - auto_tag: false - tags: nightly-linux-arm64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - ---- -kind: pipeline -name: docker-linux-arm64-release-branch - -platform: - os: linux - arch: arm64 - -trigger: - ref: - - "refs/heads/release/v*" - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git fetch --tags --force - - - name: publish - image: plugins/docker:latest - pull: always - settings: - auto_tag: false - tags: ${DRONE_BRANCH##release/v}-nightly-linux-arm64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: plugins/docker:latest - settings: - dockerfile: Dockerfile.rootless - auto_tag: false - tags: ${DRONE_BRANCH##release/v}-nightly-linux-arm64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - DOCKER_BUILDKIT: 1 - when: - event: - exclude: - - pull_request - ---- -kind: pipeline -type: docker -name: docker-manifest-version - -platform: - os: linux - arch: amd64 - -steps: - - name: manifest-rootless - image: plugins/manifest - pull: always - settings: - auto_tag: true - ignore_missing: true - spec: docker/manifest.rootless.tmpl - password: - from_secret: docker_password - username: - from_secret: docker_username - - - name: manifest - image: plugins/manifest - settings: - auto_tag: true - ignore_missing: true - spec: docker/manifest.tmpl - password: - from_secret: docker_password - username: - from_secret: docker_username - -trigger: - ref: - - "refs/tags/**" - paths: - exclude: - - "docs/**" - -depends_on: - - docker-linux-amd64-release-version - - docker-linux-amd64-release-candidate-version - - docker-linux-arm64-release-version - - docker-linux-arm64-release-candidate-version - ---- -kind: pipeline -type: docker -name: docker-manifest - -platform: - os: linux - arch: amd64 - -steps: - - name: manifest-rootless - image: plugins/manifest - pull: always - settings: - auto_tag: false - ignore_missing: true - spec: docker/manifest.rootless.tmpl - password: - from_secret: docker_password - username: - from_secret: docker_username - - - name: manifest - image: plugins/manifest - settings: - auto_tag: false - ignore_missing: true - spec: docker/manifest.tmpl - password: - from_secret: docker_password - username: - from_secret: docker_username - -trigger: - ref: - - refs/heads/main - - "refs/heads/release/v*" - paths: - exclude: - - "docs/**" - -depends_on: - - docker-linux-amd64-release - - docker-linux-arm64-release - - docker-linux-amd64-release-branch - - docker-linux-arm64-release-branch diff --git a/Makefile b/Makefile index 664839273b55b..a2a0b16dda04d 100644 --- a/Makefile +++ b/Makefile @@ -463,13 +463,19 @@ test\#%: coverage: grep '^\(mode: .*\)\|\(.*:[0-9]\+\.[0-9]\+,[0-9]\+\.[0-9]\+ [0-9]\+ [0-9]\+\)$$' coverage.out > coverage-bodged.out grep '^\(mode: .*\)\|\(.*:[0-9]\+\.[0-9]\+,[0-9]\+\.[0-9]\+ [0-9]\+ [0-9]\+\)$$' integration.coverage.out > integration.coverage-bodged.out - $(GO) run build/gocovmerge.go integration.coverage-bodged.out coverage-bodged.out > coverage.all + $(GO) run build/gocoverage.go merge integration.coverage-bodged.out coverage-bodged.out > coverage.all .PHONY: unit-test-coverage unit-test-coverage: @echo "Running unit-test-coverage $(GOTESTFLAGS) -tags '$(TEST_TAGS)'..." @$(GO) test $(GOTESTFLAGS) -timeout=20m -tags='$(TEST_TAGS)' -cover -coverprofile coverage.out $(GO_TEST_PACKAGES) && echo "\n==>\033[32m Ok\033[m\n" || exit 1 +.PHONY: unit-test-coverage-check +unit-test-coverage-check: + @$(GO) run build/gocoverage.go check coverage.out \ + code.gitea.io/gitea/modules/setting=7.1% \ + code.gitea.io/gitea/modules/hostmatcher=68.6% + .PHONY: tidy tidy: $(eval MIN_GO_VERSION := $(shell grep -Eo '^go\s+[0-9]+\.[0-9.]+' go.mod | cut -d' ' -f2)) diff --git a/build/gocovmerge.go b/build/gocoverage.go similarity index 53% rename from build/gocovmerge.go rename to build/gocoverage.go index c6f74ed85cd3d..80ba73d777564 100644 --- a/build/gocovmerge.go +++ b/build/gocoverage.go @@ -10,12 +10,15 @@ package main import ( - "flag" "fmt" "io" "log" + "math" "os" + "path" "sort" + "strconv" + "strings" "golang.org/x/tools/cover" ) @@ -99,12 +102,52 @@ func dumpProfiles(profiles []*cover.Profile, out io.Writer) { } } -func main() { - flag.Parse() +func parseArgs() (mainOptions map[string]string, subCmd string, subArgs []string) { + mainOptions = map[string]string{} + for i := 1; i < len(os.Args); i++ { + arg := os.Args[i] + if arg == "" { + break + } + if arg[0] == '-' { + arg = strings.TrimPrefix(arg, "-") + arg = strings.TrimPrefix(arg, "-") + fields := strings.SplitN(arg, "=", 2) + if len(fields) == 1 { + mainOptions[fields[0]] = "1" + } else { + mainOptions[fields[0]] = fields[1] + } + } else { + subCmd = arg + subArgs = os.Args[i+1:] + break + } + } + return +} + +func showUsage() { + fmt.Printf(`Usage: %[1]s {command} [arguments] + +Commands: + %[1]s merge ... + %[1]s check [coverage_file] [package=percent] ... + +Arguments: + {file-list} the file list + +Example: + %[1]s merge -s -d {file-list} + %[1]s check coverage.out code.gitea.io/gitea/modules/setting=4%% +`, "gocoverage") +} + +func merge(args []string) { var merged []*cover.Profile - for _, file := range flag.Args() { + for _, file := range args { profiles, err := cover.ParseProfiles(file) if err != nil { log.Fatalf("failed to parse profile '%s': %v", file, err) @@ -116,3 +159,83 @@ func main() { dumpProfiles(merged, os.Stdout) } + +func percentToInt64(percent string) int64 { + value := strings.ReplaceAll(percent, "%", "") + i, err := strconv.ParseFloat(value, 10) + if err != nil { + log.Fatalf("invalid percent: %s", percent) + } + return int64(i * 10) +} + +func profileCount(p *cover.Profile) (int64, int64) { + blocks := p.Blocks + var active, total int64 + for i := range blocks { + stmts := int64(blocks[i].NumStmt) + total += stmts + if blocks[i].Count > 0 { + active += stmts + } + } + return total, active +} + +func checkPackages(args []string) { + if len(args) < 2 { + log.Fatalf("invalid arguments: %v", args) + return + } + coverageFile, packages := args[0], args[1:] + profiles, err := cover.ParseProfiles(coverageFile) + if err != nil { + log.Fatalf("failed to parse profile '%s': %v", coverageFile, err) + } + packagesRequirements := make(map[string]int64) + for _, p := range packages { + parts := strings.Split(p, "=") + if len(parts) != 2 { + continue + } + packagesRequirements[parts[0]] = percentToInt64(parts[1]) + } + packagesTotals := make(map[string]int64) + packagesActives := make(map[string]int64) + for _, p := range profiles { + pkg := path.Dir(p.FileName) + _, ok := packagesRequirements[pkg] + if !ok { + continue + } + total, active := profileCount(p) + packagesTotals[pkg] += total + packagesActives[pkg] += active + } + var failed bool + for k, v := range packagesRequirements { + actual := 100 * float64(packagesActives[k]) / float64(packagesTotals[k]) + if v > int64(math.Floor(actual*10+0.5)) { + log.Printf("package %s coverage is %.1f%%, required %.1f%%\n", k, actual, float64(v)/10.0) + failed = true + } + } + if failed { + os.Exit(1) + } +} + +func main() { + _, subCmd, subArgs := parseArgs() + if subCmd == "" { + showUsage() + os.Exit(1) + } + + switch subCmd { + case "merge": + merge(subArgs) + case "check": + checkPackages(subArgs) + } +} From 3ac48ce5231cbd84212d95fa68e7090c68bb7648 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 12 Jan 2023 16:24:11 +0800 Subject: [PATCH 02/10] check all tests coverage but not only unit test --- Makefile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index a2a0b16dda04d..3d7bbe71fb459 100644 --- a/Makefile +++ b/Makefile @@ -220,6 +220,7 @@ help: @echo " - test test everything" @echo " - test-frontend test frontend files" @echo " - test-backend test backend files" + @echo " - test-coverage-check check package coverage in tests" @echo " - test-e2e[\#TestSpecificName] test end to end using playwright" @echo " - webpack build webpack files" @echo " - svg build svg files" @@ -470,9 +471,9 @@ unit-test-coverage: @echo "Running unit-test-coverage $(GOTESTFLAGS) -tags '$(TEST_TAGS)'..." @$(GO) test $(GOTESTFLAGS) -timeout=20m -tags='$(TEST_TAGS)' -cover -coverprofile coverage.out $(GO_TEST_PACKAGES) && echo "\n==>\033[32m Ok\033[m\n" || exit 1 -.PHONY: unit-test-coverage-check -unit-test-coverage-check: - @$(GO) run build/gocoverage.go check coverage.out \ +.PHONY: test-coverage-check +test-coverage-check: + @$(GO) run build/gocoverage.go check coverage.all \ code.gitea.io/gitea/modules/setting=7.1% \ code.gitea.io/gitea/modules/hostmatcher=68.6% From b2db338dd3f79411dba28f58a4d0ff01282e1b58 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 16 Jan 2023 16:30:06 +0800 Subject: [PATCH 03/10] add more package test requirement --- Makefile | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 126 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 3d7bbe71fb459..6c68edac82cb8 100644 --- a/Makefile +++ b/Makefile @@ -474,8 +474,132 @@ unit-test-coverage: .PHONY: test-coverage-check test-coverage-check: @$(GO) run build/gocoverage.go check coverage.all \ - code.gitea.io/gitea/modules/setting=7.1% \ - code.gitea.io/gitea/modules/hostmatcher=68.6% + code.gitea.io/gitea/modules/activitypub=60.66% \ + code.gitea.io/gitea/modules/analyze=73.91% \ + code.gitea.io/gitea/modules/auth=60.29% \ + code.gitea.io/gitea/modules/avatar=55.20% \ + code.gitea.io/gitea/modules/base=92.96% \ + code.gitea.io/gitea/modules/cache=14.60% \ + code.gitea.io/gitea/modules/charset=56.67% \ + code.gitea.io/gitea/modules/container=100.00% \ + code.gitea.io/gitea/modules/context=58.91% \ + code.gitea.io/gitea/modules/csv=100.00% \ + code.gitea.io/gitea/modules/doctor=20.87% \ + code.gitea.io/gitea/modules/emoji=85.11% \ + code.gitea.io/gitea/modules/eventsource=53.88% \ + code.gitea.io/gitea/modules/generate=0.00% \ + code.gitea.io/gitea/modules/git=61.93% \ + code.gitea.io/gitea/modules/gitgraph=75.77% \ + code.gitea.io/gitea/modules/graceful=29.29% \ + code.gitea.io/gitea/modules/hcaptcha=0.00% \ + code.gitea.io/gitea/modules/highlight=67.14% \ + code.gitea.io/gitea/modules/hostmatcher=79.34% \ + code.gitea.io/gitea/modules/html=100.00% \ + code.gitea.io/gitea/modules/httpcache=78.95% \ + code.gitea.io/gitea/modules/httplib=67.86% \ + code.gitea.io/gitea/modules/indexer=39.21% \ + code.gitea.io/gitea/modules/issue=75.47% \ + code.gitea.io/gitea/modules/json=43.75% \ + code.gitea.io/gitea/modules/lfs=70.98% \ + code.gitea.io/gitea/modules/log=69.41% \ + code.gitea.io/gitea/modules/markup=53.32% \ + code.gitea.io/gitea/modules/mcaptcha=0.00% \ + code.gitea.io/gitea/modules/metrics=0.00% \ + code.gitea.io/gitea/modules/migration=70.45% \ + code.gitea.io/gitea/modules/mirror=16.67% \ + code.gitea.io/gitea/modules/nosql=29.21% \ + code.gitea.io/gitea/modules/notification=64.94% \ + code.gitea.io/gitea/modules/options=48.74% \ + code.gitea.io/gitea/modules/packages=70.63% \ + code.gitea.io/gitea/modules/paginator=100.00% \ + code.gitea.io/gitea/modules/password=66.18% \ + code.gitea.io/gitea/modules/pprof=0.00% \ + code.gitea.io/gitea/modules/private=13.40% \ + code.gitea.io/gitea/modules/process=40.28% \ + code.gitea.io/gitea/modules/proxy=21.43% \ + code.gitea.io/gitea/modules/proxyprotocol=0.00% \ + code.gitea.io/gitea/modules/public=53.26% \ + code.gitea.io/gitea/modules/queue=39.17% \ + code.gitea.io/gitea/modules/recaptcha=0.00% \ + code.gitea.io/gitea/modules/references=80.50% \ + code.gitea.io/gitea/modules/regexplru=65.22% \ + code.gitea.io/gitea/modules/repository=49.68% \ + code.gitea.io/gitea/modules/secret=64.00% \ + code.gitea.io/gitea/modules/session=18.63% \ + code.gitea.io/gitea/modules/setting=54.19% \ + code.gitea.io/gitea/modules/sitemap=82.35% \ + code.gitea.io/gitea/modules/ssh=45.98% \ + code.gitea.io/gitea/modules/storage=57.14% \ + code.gitea.io/gitea/modules/structs=54.22% \ + code.gitea.io/gitea/modules/svg=96.15% \ + code.gitea.io/gitea/modules/sync=100.00% \ + code.gitea.io/gitea/modules/system=70.00% \ + code.gitea.io/gitea/modules/templates=43.01% \ + code.gitea.io/gitea/modules/test=68.83% \ + code.gitea.io/gitea/modules/timeutil=80.80% \ + code.gitea.io/gitea/modules/translation=60.70% \ + code.gitea.io/gitea/modules/typesniffer=92.86% \ + code.gitea.io/gitea/modules/updatechecker=0.00% \ + code.gitea.io/gitea/modules/upload=73.85% \ + code.gitea.io/gitea/modules/uri=27.78% \ + code.gitea.io/gitea/modules/user=23.53% \ + code.gitea.io/gitea/modules/util=72.93% \ + code.gitea.io/gitea/modules/validation=80.12% \ + code.gitea.io/gitea/modules/watcher=0.00% \ + code.gitea.io/gitea/modules/web=76.76% \ + code.gitea.io/gitea/modules/webhook=13.79% \ + code.gitea.io/gitea/models/activities=58.48% \ + code.gitea.io/gitea/models/admin=33.55% \ + code.gitea.io/gitea/models/asymkey=41.40% \ + code.gitea.io/gitea/models/auth=46.36% \ + code.gitea.io/gitea/models/avatars=31.82% \ + code.gitea.io/gitea/models/db=41.53% \ + code.gitea.io/gitea/models/git=44.19% \ + code.gitea.io/gitea/models/issues=57.31% \ + code.gitea.io/gitea/models/organization=71.00% \ + code.gitea.io/gitea/models/packages=71.66% \ + code.gitea.io/gitea/models/perm=57.05% \ + code.gitea.io/gitea/models/project=31.85% \ + code.gitea.io/gitea/models/pull=36.13% \ + code.gitea.io/gitea/models/repo=58.62% \ + code.gitea.io/gitea/models/secret=24.56% \ + code.gitea.io/gitea/models/system=56.16% \ + code.gitea.io/gitea/models/unit=48.72% \ + code.gitea.io/gitea/models/unittest=31.91% \ + code.gitea.io/gitea/models/user=55.82% \ + code.gitea.io/gitea/models/webhook=66.02% \ + code.gitea.io/gitea/routers/api=60.66% \ + code.gitea.io/gitea/routers/common=61.15% \ + code.gitea.io/gitea/routers/install=7.39% \ + code.gitea.io/gitea/routers/private=34.74% \ + code.gitea.io/gitea/routers/utils=100.00% \ + code.gitea.io/gitea/routers/web=28.95% \ + code.gitea.io/gitea/services/agit=56.59% \ + code.gitea.io/gitea/services/asymkey=36.73% \ + code.gitea.io/gitea/services/attachment=60.87% \ + code.gitea.io/gitea/services/auth=38.99% \ + code.gitea.io/gitea/services/automerge=44.83% \ + code.gitea.io/gitea/services/context=47.22% \ + code.gitea.io/gitea/services/convert=74.80% \ + code.gitea.io/gitea/services/cron=61.44% \ + code.gitea.io/gitea/services/externalaccount=0.00% \ + code.gitea.io/gitea/services/forms=36.81% \ + code.gitea.io/gitea/services/gitdiff=70.52% \ + code.gitea.io/gitea/services/issue=40.50% \ + code.gitea.io/gitea/services/lfs=57.06% \ + code.gitea.io/gitea/services/mailer=54.55% \ + code.gitea.io/gitea/services/markup=100.00% \ + code.gitea.io/gitea/services/migrations=35.97% \ + code.gitea.io/gitea/services/mirror=29.83% \ + code.gitea.io/gitea/services/org=49.02% \ + code.gitea.io/gitea/services/packages=51.94% \ + code.gitea.io/gitea/services/pull=43.34% \ + code.gitea.io/gitea/services/release=45.09% \ + code.gitea.io/gitea/services/repository=41.19% \ + code.gitea.io/gitea/services/task=43.75% \ + code.gitea.io/gitea/services/user=46.24% \ + code.gitea.io/gitea/services/webhook=66.63% \ + code.gitea.io/gitea/services/wiki=56.41% \ .PHONY: tidy tidy: From 56802c05c7de5b7d60b713e6177da55824d648b1 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 16 Jan 2023 17:35:11 +0800 Subject: [PATCH 04/10] ignore accurate coverage percent --- Makefile | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 6c68edac82cb8..0e60f5027a107 100644 --- a/Makefile +++ b/Makefile @@ -479,18 +479,18 @@ test-coverage-check: code.gitea.io/gitea/modules/auth=60.29% \ code.gitea.io/gitea/modules/avatar=55.20% \ code.gitea.io/gitea/modules/base=92.96% \ - code.gitea.io/gitea/modules/cache=14.60% \ + code.gitea.io/gitea/modules/cache=14.5% \ code.gitea.io/gitea/modules/charset=56.67% \ code.gitea.io/gitea/modules/container=100.00% \ code.gitea.io/gitea/modules/context=58.91% \ code.gitea.io/gitea/modules/csv=100.00% \ - code.gitea.io/gitea/modules/doctor=20.87% \ - code.gitea.io/gitea/modules/emoji=85.11% \ + code.gitea.io/gitea/modules/doctor=15.1% \ + code.gitea.io/gitea/modules/emoji=83.3% \ code.gitea.io/gitea/modules/eventsource=53.88% \ code.gitea.io/gitea/modules/generate=0.00% \ code.gitea.io/gitea/modules/git=61.93% \ code.gitea.io/gitea/modules/gitgraph=75.77% \ - code.gitea.io/gitea/modules/graceful=29.29% \ + code.gitea.io/gitea/modules/graceful=29.0% \ code.gitea.io/gitea/modules/hcaptcha=0.00% \ code.gitea.io/gitea/modules/highlight=67.14% \ code.gitea.io/gitea/modules/hostmatcher=79.34% \ @@ -515,8 +515,8 @@ test-coverage-check: code.gitea.io/gitea/modules/password=66.18% \ code.gitea.io/gitea/modules/pprof=0.00% \ code.gitea.io/gitea/modules/private=13.40% \ - code.gitea.io/gitea/modules/process=40.28% \ - code.gitea.io/gitea/modules/proxy=21.43% \ + code.gitea.io/gitea/modules/process=38.5% \ + code.gitea.io/gitea/modules/proxy=17.2% \ code.gitea.io/gitea/modules/proxyprotocol=0.00% \ code.gitea.io/gitea/modules/public=53.26% \ code.gitea.io/gitea/modules/queue=39.17% \ @@ -531,7 +531,7 @@ test-coverage-check: code.gitea.io/gitea/modules/ssh=45.98% \ code.gitea.io/gitea/modules/storage=57.14% \ code.gitea.io/gitea/modules/structs=54.22% \ - code.gitea.io/gitea/modules/svg=96.15% \ + code.gitea.io/gitea/modules/svg=94.4% \ code.gitea.io/gitea/modules/sync=100.00% \ code.gitea.io/gitea/modules/system=70.00% \ code.gitea.io/gitea/modules/templates=43.01% \ @@ -544,10 +544,10 @@ test-coverage-check: code.gitea.io/gitea/modules/uri=27.78% \ code.gitea.io/gitea/modules/user=23.53% \ code.gitea.io/gitea/modules/util=72.93% \ - code.gitea.io/gitea/modules/validation=80.12% \ + code.gitea.io/gitea/modules/validation=79.4% \ code.gitea.io/gitea/modules/watcher=0.00% \ code.gitea.io/gitea/modules/web=76.76% \ - code.gitea.io/gitea/modules/webhook=13.79% \ + code.gitea.io/gitea/modules/webhook=13.3% \ code.gitea.io/gitea/models/activities=58.48% \ code.gitea.io/gitea/models/admin=33.55% \ code.gitea.io/gitea/models/asymkey=41.40% \ @@ -570,7 +570,7 @@ test-coverage-check: code.gitea.io/gitea/models/webhook=66.02% \ code.gitea.io/gitea/routers/api=60.66% \ code.gitea.io/gitea/routers/common=61.15% \ - code.gitea.io/gitea/routers/install=7.39% \ + code.gitea.io/gitea/routers/install=5.7% \ code.gitea.io/gitea/routers/private=34.74% \ code.gitea.io/gitea/routers/utils=100.00% \ code.gitea.io/gitea/routers/web=28.95% \ @@ -580,10 +580,10 @@ test-coverage-check: code.gitea.io/gitea/services/auth=38.99% \ code.gitea.io/gitea/services/automerge=44.83% \ code.gitea.io/gitea/services/context=47.22% \ - code.gitea.io/gitea/services/convert=74.80% \ - code.gitea.io/gitea/services/cron=61.44% \ + code.gitea.io/gitea/services/convert=73.5% \ + code.gitea.io/gitea/services/cron=56.2% \ code.gitea.io/gitea/services/externalaccount=0.00% \ - code.gitea.io/gitea/services/forms=36.81% \ + code.gitea.io/gitea/services/forms=36.5% \ code.gitea.io/gitea/services/gitdiff=70.52% \ code.gitea.io/gitea/services/issue=40.50% \ code.gitea.io/gitea/services/lfs=57.06% \ From 164d427b21c3a4897e60fe914fc5774cdaa96ab2 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 13 Jun 2023 18:27:27 +0800 Subject: [PATCH 05/10] Use artifact to upload coverages and download then when merging --- .github/workflows/pull-db-tests.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/.github/workflows/pull-db-tests.yml b/.github/workflows/pull-db-tests.yml index 9d0c890064654..ba8e9c2678ace 100644 --- a/.github/workflows/pull-db-tests.yml +++ b/.github/workflows/pull-db-tests.yml @@ -139,12 +139,20 @@ jobs: TAGS: bindata RACE_ENABLED: true GITHUB_READ_TOKEN: ${{ secrets.GITHUB_READ_TOKEN }} + - uses: actions/upload-artifact@v3 + with: + name: unit-test-coverage + path: coverage.out - name: unit-tests-gogit run: make unit-test-coverage test-check env: TAGS: bindata gogit RACE_ENABLED: true GITHUB_READ_TOKEN: ${{ secrets.GITHUB_READ_TOKEN }} + - uses: actions/upload-artifact@v3 + with: + name: unit-test-coverage-gogit + path: coverage.out test-mysql5: if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.frontend == 'true' @@ -190,6 +198,10 @@ jobs: RACE_ENABLED: true USE_REPO_TEST_DIR: 1 TEST_INDEXER_CODE_ES_URL: "http://elastic:changeme@elasticsearch:9200" + - uses: actions/upload-artifact@v3 + with: + name: unit-test-coverage-integration + path: integration.coverage.out test-mysql8: if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.frontend == 'true' @@ -251,3 +263,16 @@ jobs: env: TAGS: bindata USE_REPO_TEST_DIR: 1 + + test-coverage-check: + if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.frontend == 'true' + needs: [files-changed, test-pgsql, test-sqlite, test-unit, test-mysql5, test-mysql8, test-mssql] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v4 + with: + go-version: ">=1.20" + check-latest: true + - uses: actions/download-artifact@v3 + - run: make coverage test-coverage-check From 980344931ae62e5b5007217fb679487c810d97f1 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 14 Jun 2023 19:30:42 +0800 Subject: [PATCH 06/10] take .drone.yml back --- .drone.yml | 865 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 865 insertions(+) create mode 100644 .drone.yml diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000000000..4e7789ef92331 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,865 @@ +--- +kind: pipeline +type: docker +name: release-latest + +platform: + os: linux + arch: amd64 + +workspace: + base: /source + path: / + +trigger: + branch: + - main + - "release/*" + event: + - push + paths: + exclude: + - "docs/**" + +volumes: + - name: deps + temp: {} + +steps: + - name: fetch-tags + image: docker:git + pull: always + commands: + - git fetch --tags --force + + - name: deps-frontend + image: node:20 + pull: always + commands: + - make deps-frontend + + - name: deps-backend + image: gitea/test_env:linux-1.20-amd64 + pull: always + commands: + - make deps-backend + volumes: + - name: deps + path: /go + + - name: static + image: techknowlogick/xgo:go-1.20.x + pull: always + commands: + # Upgrade to node 20 once https://github.com/techknowlogick/xgo/issues/163 is resolved + - curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get -qqy install nodejs + - export PATH=$PATH:$GOPATH/bin + - make release + environment: + GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not + TAGS: bindata sqlite sqlite_unlock_notify + DEBIAN_FRONTEND: noninteractive + volumes: + - name: deps + path: /go + + - name: gpg-sign + image: plugins/gpgsign:1 + pull: always + settings: + detach_sign: true + excludes: + - "dist/release/*.sha256" + files: + - "dist/release/*" + environment: + GPGSIGN_KEY: + from_secret: gpgsign_key + GPGSIGN_PASSPHRASE: + from_secret: gpgsign_passphrase + + - name: release-branch + image: woodpeckerci/plugin-s3:latest + pull: always + settings: + acl: + from_secret: aws_s3_acl + region: + from_secret: aws_s3_region + bucket: + from_secret: aws_s3_bucket + endpoint: + from_secret: aws_s3_endpoint + path_style: + from_secret: aws_s3_path_style + source: "dist/release/*" + strip_prefix: dist/release/ + target: "/gitea/${DRONE_BRANCH##release/v}" + environment: + AWS_ACCESS_KEY_ID: + from_secret: aws_access_key_id + AWS_SECRET_ACCESS_KEY: + from_secret: aws_secret_access_key + when: + branch: + - "release/*" + event: + - push + + - name: release-main + image: woodpeckerci/plugin-s3:latest + settings: + acl: + from_secret: aws_s3_acl + region: + from_secret: aws_s3_region + bucket: + from_secret: aws_s3_bucket + endpoint: + from_secret: aws_s3_endpoint + path_style: + from_secret: aws_s3_path_style + source: "dist/release/*" + strip_prefix: dist/release/ + target: /gitea/main + environment: + AWS_ACCESS_KEY_ID: + from_secret: aws_access_key_id + AWS_SECRET_ACCESS_KEY: + from_secret: aws_secret_access_key + when: + branch: + - main + event: + - push + +--- +kind: pipeline +name: release-version + +platform: + os: linux + arch: amd64 + +workspace: + base: /source + path: / + +trigger: + event: + - tag + +volumes: + - name: deps + temp: {} + +steps: + - name: fetch-tags + image: docker:git + pull: always + commands: + - git fetch --tags --force + + - name: deps-frontend + image: node:20 + pull: always + commands: + - make deps-frontend + + - name: deps-backend + image: gitea/test_env:linux-1.20-amd64 + pull: always + commands: + - make deps-backend + volumes: + - name: deps + path: /go + + - name: static + image: techknowlogick/xgo:go-1.20.x + pull: always + commands: + # Upgrade to node 20 once https://github.com/techknowlogick/xgo/issues/163 is resolved + - curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get -qqy install nodejs + - export PATH=$PATH:$GOPATH/bin + - make release + environment: + GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not + TAGS: bindata sqlite sqlite_unlock_notify + DEBIAN_FRONTEND: noninteractive + depends_on: [fetch-tags] + volumes: + - name: deps + path: /go + + - name: gpg-sign + image: plugins/gpgsign:1 + pull: always + settings: + detach_sign: true + excludes: + - "dist/release/*.sha256" + files: + - "dist/release/*" + environment: + GPGSIGN_KEY: + from_secret: gpgsign_key + GPGSIGN_PASSPHRASE: + from_secret: gpgsign_passphrase + depends_on: [static] + + - name: release-tag + image: woodpeckerci/plugin-s3:latest + pull: always + settings: + acl: + from_secret: aws_s3_acl + region: + from_secret: aws_s3_region + bucket: + from_secret: aws_s3_bucket + endpoint: + from_secret: aws_s3_endpoint + path_style: + from_secret: aws_s3_path_style + source: "dist/release/*" + strip_prefix: dist/release/ + target: "/gitea/${DRONE_TAG##v}" + environment: + AWS_ACCESS_KEY_ID: + from_secret: aws_access_key_id + AWS_SECRET_ACCESS_KEY: + from_secret: aws_secret_access_key + depends_on: [gpg-sign] + + - name: github + image: plugins/github-release:latest + pull: always + settings: + files: + - "dist/release/*" + file_exists: overwrite + environment: + GITHUB_TOKEN: + from_secret: github_token + depends_on: [gpg-sign] + +--- +kind: pipeline +type: docker +name: docker-linux-amd64-release-version + +platform: + os: linux + arch: amd64 + +trigger: + ref: + include: + - "refs/tags/**" + exclude: + - "refs/tags/**-rc*" + paths: + exclude: + - "docs/**" + +steps: + - name: fetch-tags + image: docker:git + pull: always + commands: + - git fetch --tags --force + + - name: publish + image: plugins/docker:latest + pull: always + settings: + auto_tag: true + auto_tag_suffix: linux-amd64 + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + + - name: publish-rootless + image: plugins/docker:latest + settings: + dockerfile: Dockerfile.rootless + auto_tag: true + auto_tag_suffix: linux-amd64-rootless + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request +--- + +kind: pipeline +type: docker +name: docker-linux-amd64-release-candidate-version + +platform: + os: linux + arch: amd64 + +trigger: + ref: + - "refs/tags/**-rc*" + paths: + exclude: + - "docs/**" + +steps: + - name: fetch-tags + image: docker:git + pull: always + commands: + - git fetch --tags --force + + - name: publish + image: plugins/docker:latest + pull: always + settings: + tags: ${DRONE_TAG##v}-linux-amd64 + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + + - name: publish-rootless + image: plugins/docker:latest + settings: + dockerfile: Dockerfile.rootless + tags: ${DRONE_TAG##v}-linux-amd64-rootless + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + +--- +kind: pipeline +type: docker +name: docker-linux-amd64-release + +platform: + os: linux + arch: amd64 + +trigger: + ref: + - refs/heads/main + +steps: + - name: fetch-tags + image: docker:git + pull: always + commands: + - git fetch --tags --force + + - name: publish + image: plugins/docker:latest + pull: always + settings: + auto_tag: false + tags: nightly-linux-amd64 + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + + - name: publish-rootless + image: plugins/docker:latest + settings: + dockerfile: Dockerfile.rootless + auto_tag: false + tags: nightly-linux-amd64-rootless + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + +--- +kind: pipeline +name: docker-linux-amd64-release-branch + +platform: + os: linux + arch: amd64 + +trigger: + ref: + - "refs/heads/release/v*" + +steps: + - name: fetch-tags + image: docker:git + pull: always + commands: + - git fetch --tags --force + + - name: publish + image: plugins/docker:latest + pull: always + settings: + auto_tag: false + tags: ${DRONE_BRANCH##release/v}-nightly-linux-amd64 + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + + - name: publish-rootless + image: plugins/docker:latest + settings: + dockerfile: Dockerfile.rootless + auto_tag: false + tags: ${DRONE_BRANCH##release/v}-nightly-linux-amd64-rootless + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + +--- +kind: pipeline +type: docker +name: docker-linux-arm64-release-version + +platform: + os: linux + arch: arm64 + +trigger: + ref: + include: + - "refs/tags/**" + exclude: + - "refs/tags/**-rc*" + paths: + exclude: + - "docs/**" + +steps: + - name: fetch-tags + image: docker:git + pull: always + commands: + - git fetch --tags --force + + - name: publish + image: plugins/docker:latest + pull: always + settings: + auto_tag: true + auto_tag_suffix: linux-arm64 + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + + - name: publish-rootless + image: plugins/docker:latest + settings: + dockerfile: Dockerfile.rootless + auto_tag: true + auto_tag_suffix: linux-arm64-rootless + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + +--- +kind: pipeline +type: docker +name: docker-linux-arm64-release-candidate-version + +platform: + os: linux + arch: arm64 + +trigger: + ref: + - "refs/tags/**-rc*" + paths: + exclude: + - "docs/**" + +steps: + - name: fetch-tags + image: docker:git + pull: always + commands: + - git fetch --tags --force + + - name: publish + image: plugins/docker:latest + pull: always + settings: + tags: ${DRONE_TAG##v}-linux-arm64 + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + + - name: publish-rootless + image: plugins/docker:latest + settings: + dockerfile: Dockerfile.rootless + tags: ${DRONE_TAG##v}-linux-arm64-rootless + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + +--- +kind: pipeline +type: docker +name: docker-linux-arm64-release + +platform: + os: linux + arch: arm64 + +trigger: + ref: + - refs/heads/main + paths: + exclude: + - "docs/**" + +steps: + - name: fetch-tags + image: docker:git + pull: always + commands: + - git fetch --tags --force + + - name: publish + image: plugins/docker:latest + pull: always + settings: + auto_tag: false + tags: nightly-linux-arm64 + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + + - name: publish-rootless + image: plugins/docker:latest + settings: + dockerfile: Dockerfile.rootless + auto_tag: false + tags: nightly-linux-arm64-rootless + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + +--- +kind: pipeline +name: docker-linux-arm64-release-branch + +platform: + os: linux + arch: arm64 + +trigger: + ref: + - "refs/heads/release/v*" + +steps: + - name: fetch-tags + image: docker:git + pull: always + commands: + - git fetch --tags --force + + - name: publish + image: plugins/docker:latest + pull: always + settings: + auto_tag: false + tags: ${DRONE_BRANCH##release/v}-nightly-linux-arm64 + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + + - name: publish-rootless + image: plugins/docker:latest + settings: + dockerfile: Dockerfile.rootless + auto_tag: false + tags: ${DRONE_BRANCH##release/v}-nightly-linux-arm64-rootless + repo: gitea/gitea + build_args: + - GOPROXY=https://goproxy.io + password: + from_secret: docker_password + username: + from_secret: docker_username + environment: + PLUGIN_MIRROR: + from_secret: plugin_mirror + DOCKER_BUILDKIT: 1 + when: + event: + exclude: + - pull_request + +--- +kind: pipeline +type: docker +name: docker-manifest-version + +platform: + os: linux + arch: amd64 + +steps: + - name: manifest-rootless + image: plugins/manifest + pull: always + settings: + auto_tag: true + ignore_missing: true + spec: docker/manifest.rootless.tmpl + password: + from_secret: docker_password + username: + from_secret: docker_username + + - name: manifest + image: plugins/manifest + settings: + auto_tag: true + ignore_missing: true + spec: docker/manifest.tmpl + password: + from_secret: docker_password + username: + from_secret: docker_username + +trigger: + ref: + - "refs/tags/**" + paths: + exclude: + - "docs/**" + +depends_on: + - docker-linux-amd64-release-version + - docker-linux-amd64-release-candidate-version + - docker-linux-arm64-release-version + - docker-linux-arm64-release-candidate-version + +--- +kind: pipeline +type: docker +name: docker-manifest + +platform: + os: linux + arch: amd64 + +steps: + - name: manifest-rootless + image: plugins/manifest + pull: always + settings: + auto_tag: false + ignore_missing: true + spec: docker/manifest.rootless.tmpl + password: + from_secret: docker_password + username: + from_secret: docker_username + + - name: manifest + image: plugins/manifest + settings: + auto_tag: false + ignore_missing: true + spec: docker/manifest.tmpl + password: + from_secret: docker_password + username: + from_secret: docker_username + +trigger: + ref: + - refs/heads/main + - "refs/heads/release/v*" + paths: + exclude: + - "docs/**" + +depends_on: + - docker-linux-amd64-release + - docker-linux-arm64-release + - docker-linux-amd64-release-branch + - docker-linux-arm64-release-branch From 495eb4ae1da7e185e8e65166f1ec5be0dea894df Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 14 Jun 2023 19:45:53 +0800 Subject: [PATCH 07/10] Fix test --- Makefile | 128 +-------------------------------- build/gocoverage.go | 11 ++- tests/coverage_requirement.txt | 126 ++++++++++++++++++++++++++++++++ 3 files changed, 135 insertions(+), 130 deletions(-) create mode 100644 tests/coverage_requirement.txt diff --git a/Makefile b/Makefile index 0e60f5027a107..f9a4bdeb8b697 100644 --- a/Makefile +++ b/Makefile @@ -473,133 +473,7 @@ unit-test-coverage: .PHONY: test-coverage-check test-coverage-check: - @$(GO) run build/gocoverage.go check coverage.all \ - code.gitea.io/gitea/modules/activitypub=60.66% \ - code.gitea.io/gitea/modules/analyze=73.91% \ - code.gitea.io/gitea/modules/auth=60.29% \ - code.gitea.io/gitea/modules/avatar=55.20% \ - code.gitea.io/gitea/modules/base=92.96% \ - code.gitea.io/gitea/modules/cache=14.5% \ - code.gitea.io/gitea/modules/charset=56.67% \ - code.gitea.io/gitea/modules/container=100.00% \ - code.gitea.io/gitea/modules/context=58.91% \ - code.gitea.io/gitea/modules/csv=100.00% \ - code.gitea.io/gitea/modules/doctor=15.1% \ - code.gitea.io/gitea/modules/emoji=83.3% \ - code.gitea.io/gitea/modules/eventsource=53.88% \ - code.gitea.io/gitea/modules/generate=0.00% \ - code.gitea.io/gitea/modules/git=61.93% \ - code.gitea.io/gitea/modules/gitgraph=75.77% \ - code.gitea.io/gitea/modules/graceful=29.0% \ - code.gitea.io/gitea/modules/hcaptcha=0.00% \ - code.gitea.io/gitea/modules/highlight=67.14% \ - code.gitea.io/gitea/modules/hostmatcher=79.34% \ - code.gitea.io/gitea/modules/html=100.00% \ - code.gitea.io/gitea/modules/httpcache=78.95% \ - code.gitea.io/gitea/modules/httplib=67.86% \ - code.gitea.io/gitea/modules/indexer=39.21% \ - code.gitea.io/gitea/modules/issue=75.47% \ - code.gitea.io/gitea/modules/json=43.75% \ - code.gitea.io/gitea/modules/lfs=70.98% \ - code.gitea.io/gitea/modules/log=69.41% \ - code.gitea.io/gitea/modules/markup=53.32% \ - code.gitea.io/gitea/modules/mcaptcha=0.00% \ - code.gitea.io/gitea/modules/metrics=0.00% \ - code.gitea.io/gitea/modules/migration=70.45% \ - code.gitea.io/gitea/modules/mirror=16.67% \ - code.gitea.io/gitea/modules/nosql=29.21% \ - code.gitea.io/gitea/modules/notification=64.94% \ - code.gitea.io/gitea/modules/options=48.74% \ - code.gitea.io/gitea/modules/packages=70.63% \ - code.gitea.io/gitea/modules/paginator=100.00% \ - code.gitea.io/gitea/modules/password=66.18% \ - code.gitea.io/gitea/modules/pprof=0.00% \ - code.gitea.io/gitea/modules/private=13.40% \ - code.gitea.io/gitea/modules/process=38.5% \ - code.gitea.io/gitea/modules/proxy=17.2% \ - code.gitea.io/gitea/modules/proxyprotocol=0.00% \ - code.gitea.io/gitea/modules/public=53.26% \ - code.gitea.io/gitea/modules/queue=39.17% \ - code.gitea.io/gitea/modules/recaptcha=0.00% \ - code.gitea.io/gitea/modules/references=80.50% \ - code.gitea.io/gitea/modules/regexplru=65.22% \ - code.gitea.io/gitea/modules/repository=49.68% \ - code.gitea.io/gitea/modules/secret=64.00% \ - code.gitea.io/gitea/modules/session=18.63% \ - code.gitea.io/gitea/modules/setting=54.19% \ - code.gitea.io/gitea/modules/sitemap=82.35% \ - code.gitea.io/gitea/modules/ssh=45.98% \ - code.gitea.io/gitea/modules/storage=57.14% \ - code.gitea.io/gitea/modules/structs=54.22% \ - code.gitea.io/gitea/modules/svg=94.4% \ - code.gitea.io/gitea/modules/sync=100.00% \ - code.gitea.io/gitea/modules/system=70.00% \ - code.gitea.io/gitea/modules/templates=43.01% \ - code.gitea.io/gitea/modules/test=68.83% \ - code.gitea.io/gitea/modules/timeutil=80.80% \ - code.gitea.io/gitea/modules/translation=60.70% \ - code.gitea.io/gitea/modules/typesniffer=92.86% \ - code.gitea.io/gitea/modules/updatechecker=0.00% \ - code.gitea.io/gitea/modules/upload=73.85% \ - code.gitea.io/gitea/modules/uri=27.78% \ - code.gitea.io/gitea/modules/user=23.53% \ - code.gitea.io/gitea/modules/util=72.93% \ - code.gitea.io/gitea/modules/validation=79.4% \ - code.gitea.io/gitea/modules/watcher=0.00% \ - code.gitea.io/gitea/modules/web=76.76% \ - code.gitea.io/gitea/modules/webhook=13.3% \ - code.gitea.io/gitea/models/activities=58.48% \ - code.gitea.io/gitea/models/admin=33.55% \ - code.gitea.io/gitea/models/asymkey=41.40% \ - code.gitea.io/gitea/models/auth=46.36% \ - code.gitea.io/gitea/models/avatars=31.82% \ - code.gitea.io/gitea/models/db=41.53% \ - code.gitea.io/gitea/models/git=44.19% \ - code.gitea.io/gitea/models/issues=57.31% \ - code.gitea.io/gitea/models/organization=71.00% \ - code.gitea.io/gitea/models/packages=71.66% \ - code.gitea.io/gitea/models/perm=57.05% \ - code.gitea.io/gitea/models/project=31.85% \ - code.gitea.io/gitea/models/pull=36.13% \ - code.gitea.io/gitea/models/repo=58.62% \ - code.gitea.io/gitea/models/secret=24.56% \ - code.gitea.io/gitea/models/system=56.16% \ - code.gitea.io/gitea/models/unit=48.72% \ - code.gitea.io/gitea/models/unittest=31.91% \ - code.gitea.io/gitea/models/user=55.82% \ - code.gitea.io/gitea/models/webhook=66.02% \ - code.gitea.io/gitea/routers/api=60.66% \ - code.gitea.io/gitea/routers/common=61.15% \ - code.gitea.io/gitea/routers/install=5.7% \ - code.gitea.io/gitea/routers/private=34.74% \ - code.gitea.io/gitea/routers/utils=100.00% \ - code.gitea.io/gitea/routers/web=28.95% \ - code.gitea.io/gitea/services/agit=56.59% \ - code.gitea.io/gitea/services/asymkey=36.73% \ - code.gitea.io/gitea/services/attachment=60.87% \ - code.gitea.io/gitea/services/auth=38.99% \ - code.gitea.io/gitea/services/automerge=44.83% \ - code.gitea.io/gitea/services/context=47.22% \ - code.gitea.io/gitea/services/convert=73.5% \ - code.gitea.io/gitea/services/cron=56.2% \ - code.gitea.io/gitea/services/externalaccount=0.00% \ - code.gitea.io/gitea/services/forms=36.5% \ - code.gitea.io/gitea/services/gitdiff=70.52% \ - code.gitea.io/gitea/services/issue=40.50% \ - code.gitea.io/gitea/services/lfs=57.06% \ - code.gitea.io/gitea/services/mailer=54.55% \ - code.gitea.io/gitea/services/markup=100.00% \ - code.gitea.io/gitea/services/migrations=35.97% \ - code.gitea.io/gitea/services/mirror=29.83% \ - code.gitea.io/gitea/services/org=49.02% \ - code.gitea.io/gitea/services/packages=51.94% \ - code.gitea.io/gitea/services/pull=43.34% \ - code.gitea.io/gitea/services/release=45.09% \ - code.gitea.io/gitea/services/repository=41.19% \ - code.gitea.io/gitea/services/task=43.75% \ - code.gitea.io/gitea/services/user=46.24% \ - code.gitea.io/gitea/services/webhook=66.63% \ - code.gitea.io/gitea/services/wiki=56.41% \ + @$(GO) run build/gocoverage.go check coverage.all tests/coverage_requirement.txt .PHONY: tidy tidy: diff --git a/build/gocoverage.go b/build/gocoverage.go index 80ba73d777564..ce8a37166769a 100644 --- a/build/gocoverage.go +++ b/build/gocoverage.go @@ -183,17 +183,22 @@ func profileCount(p *cover.Profile) (int64, int64) { } func checkPackages(args []string) { - if len(args) < 2 { + if len(args) != 2 { log.Fatalf("invalid arguments: %v", args) return } - coverageFile, packages := args[0], args[1:] + coverageFile, packagesFile := args[0], args[1] profiles, err := cover.ParseProfiles(coverageFile) if err != nil { log.Fatalf("failed to parse profile '%s': %v", coverageFile, err) } packagesRequirements := make(map[string]int64) - for _, p := range packages { + packages, err := os.ReadFile(packagesFile) + if err != nil { + log.Fatalf("failed to read packages file '%s': %v", packagesFile, err) + } + lines := strings.Split(string(packages), "\n") + for _, p := range lines { parts := strings.Split(p, "=") if len(parts) != 2 { continue diff --git a/tests/coverage_requirement.txt b/tests/coverage_requirement.txt new file mode 100644 index 0000000000000..ecd6e687c0fdb --- /dev/null +++ b/tests/coverage_requirement.txt @@ -0,0 +1,126 @@ +code.gitea.io/gitea/modules/activitypub=60.66% +code.gitea.io/gitea/modules/analyze=73.91% +code.gitea.io/gitea/modules/auth=60.29% +code.gitea.io/gitea/modules/avatar=55.20% +code.gitea.io/gitea/modules/base=92.96% +code.gitea.io/gitea/modules/cache=14.5% +code.gitea.io/gitea/modules/charset=56.67% +code.gitea.io/gitea/modules/container=100.00% +code.gitea.io/gitea/modules/context=58.91% +code.gitea.io/gitea/modules/csv=100.00% +code.gitea.io/gitea/modules/doctor=15.1% +code.gitea.io/gitea/modules/emoji=83.3% +code.gitea.io/gitea/modules/eventsource=53.88% +code.gitea.io/gitea/modules/generate=0.00% +code.gitea.io/gitea/modules/git=61.93% +code.gitea.io/gitea/modules/gitgraph=75.77% +code.gitea.io/gitea/modules/graceful=29.0% +code.gitea.io/gitea/modules/hcaptcha=0.00% +code.gitea.io/gitea/modules/highlight=67.14% +code.gitea.io/gitea/modules/hostmatcher=79.34% +code.gitea.io/gitea/modules/html=100.00% +code.gitea.io/gitea/modules/httpcache=78.95% +code.gitea.io/gitea/modules/httplib=67.86% +code.gitea.io/gitea/modules/indexer=39.21% +code.gitea.io/gitea/modules/issue=75.47% +code.gitea.io/gitea/modules/json=43.75% +code.gitea.io/gitea/modules/lfs=70.98% +code.gitea.io/gitea/modules/log=69.41% +code.gitea.io/gitea/modules/markup=53.32% +code.gitea.io/gitea/modules/mcaptcha=0.00% +code.gitea.io/gitea/modules/metrics=0.00% +code.gitea.io/gitea/modules/migration=70.45% +code.gitea.io/gitea/modules/mirror=16.67% +code.gitea.io/gitea/modules/nosql=29.21% +code.gitea.io/gitea/modules/notification=64.94% +code.gitea.io/gitea/modules/options=48.74% +code.gitea.io/gitea/modules/packages=70.63% +code.gitea.io/gitea/modules/paginator=100.00% +code.gitea.io/gitea/modules/password=66.18% +code.gitea.io/gitea/modules/pprof=0.00% +code.gitea.io/gitea/modules/private=13.40% +code.gitea.io/gitea/modules/process=38.5% +code.gitea.io/gitea/modules/proxy=17.2% +code.gitea.io/gitea/modules/proxyprotocol=0.00% +code.gitea.io/gitea/modules/public=53.26% +code.gitea.io/gitea/modules/queue=39.17% +code.gitea.io/gitea/modules/recaptcha=0.00% +code.gitea.io/gitea/modules/references=80.50% +code.gitea.io/gitea/modules/regexplru=65.22% +code.gitea.io/gitea/modules/repository=49.68% +code.gitea.io/gitea/modules/secret=64.00% +code.gitea.io/gitea/modules/session=18.63% +code.gitea.io/gitea/modules/setting=54.19% +code.gitea.io/gitea/modules/sitemap=82.35% +code.gitea.io/gitea/modules/ssh=45.98% +code.gitea.io/gitea/modules/storage=57.14% +code.gitea.io/gitea/modules/structs=54.22% +code.gitea.io/gitea/modules/svg=94.4% +code.gitea.io/gitea/modules/sync=100.00% +code.gitea.io/gitea/modules/system=70.00% +code.gitea.io/gitea/modules/templates=43.01% +code.gitea.io/gitea/modules/test=68.83% +code.gitea.io/gitea/modules/timeutil=80.80% +code.gitea.io/gitea/modules/translation=60.70% +code.gitea.io/gitea/modules/typesniffer=92.86% +code.gitea.io/gitea/modules/updatechecker=0.00% +code.gitea.io/gitea/modules/upload=73.85% +code.gitea.io/gitea/modules/uri=27.78% +code.gitea.io/gitea/modules/user=23.53% +code.gitea.io/gitea/modules/util=72.93% +code.gitea.io/gitea/modules/validation=79.4% +code.gitea.io/gitea/modules/watcher=0.00% +code.gitea.io/gitea/modules/web=76.76% +code.gitea.io/gitea/modules/webhook=13.3% +code.gitea.io/gitea/models/activities=58.48% +code.gitea.io/gitea/models/admin=33.55% +code.gitea.io/gitea/models/asymkey=41.40% +code.gitea.io/gitea/models/auth=46.36% +code.gitea.io/gitea/models/avatars=31.82% +code.gitea.io/gitea/models/db=41.53% +code.gitea.io/gitea/models/git=44.19% +code.gitea.io/gitea/models/issues=57.31% +code.gitea.io/gitea/models/organization=71.00% +code.gitea.io/gitea/models/packages=71.66% +code.gitea.io/gitea/models/perm=57.05% +code.gitea.io/gitea/models/project=31.85% +code.gitea.io/gitea/models/pull=36.13% +code.gitea.io/gitea/models/repo=58.62% +code.gitea.io/gitea/models/secret=24.56% +code.gitea.io/gitea/models/system=56.16% +code.gitea.io/gitea/models/unit=48.72% +code.gitea.io/gitea/models/unittest=31.91% +code.gitea.io/gitea/models/user=55.82% +code.gitea.io/gitea/models/webhook=66.02% +code.gitea.io/gitea/routers/api=60.66% +code.gitea.io/gitea/routers/common=61.15% +code.gitea.io/gitea/routers/install=5.7% +code.gitea.io/gitea/routers/private=34.74% +code.gitea.io/gitea/routers/utils=100.00% +code.gitea.io/gitea/routers/web=28.95% +code.gitea.io/gitea/services/agit=56.59% +code.gitea.io/gitea/services/asymkey=36.73% +code.gitea.io/gitea/services/attachment=60.87% +code.gitea.io/gitea/services/auth=38.99% +code.gitea.io/gitea/services/automerge=44.83% +code.gitea.io/gitea/services/context=47.22% +code.gitea.io/gitea/services/convert=73.5% +code.gitea.io/gitea/services/cron=56.2% +code.gitea.io/gitea/services/externalaccount=0.00% +code.gitea.io/gitea/services/forms=36.5% +code.gitea.io/gitea/services/gitdiff=70.52% +code.gitea.io/gitea/services/issue=40.50% +code.gitea.io/gitea/services/lfs=57.06% +code.gitea.io/gitea/services/mailer=54.55% +code.gitea.io/gitea/services/markup=100.00% +code.gitea.io/gitea/services/migrations=35.97% +code.gitea.io/gitea/services/mirror=29.83% +code.gitea.io/gitea/services/org=49.02% +code.gitea.io/gitea/services/packages=51.94% +code.gitea.io/gitea/services/pull=43.34% +code.gitea.io/gitea/services/release=45.09% +code.gitea.io/gitea/services/repository=41.19% +code.gitea.io/gitea/services/task=43.75% +code.gitea.io/gitea/services/user=46.24% +code.gitea.io/gitea/services/webhook=66.63% +code.gitea.io/gitea/services/wiki=56.41% From 390186219bd9a403a7049394ac6014b1dbdf6f41 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 15 Jun 2023 10:31:34 +0800 Subject: [PATCH 08/10] Follow silverwind and wxiaoguang's suggestion --- .github/workflows/pull-db-tests.yml | 6 +++--- Makefile | 6 +++--- build/gocoverage.go | 12 ++++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/pull-db-tests.yml b/.github/workflows/pull-db-tests.yml index ba8e9c2678ace..617f3c1973492 100644 --- a/.github/workflows/pull-db-tests.yml +++ b/.github/workflows/pull-db-tests.yml @@ -264,8 +264,8 @@ jobs: TAGS: bindata USE_REPO_TEST_DIR: 1 - test-coverage-check: - if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.frontend == 'true' + check-backend-coverage: + if: needs.files-changed.outputs.backend == 'true' needs: [files-changed, test-pgsql, test-sqlite, test-unit, test-mysql5, test-mysql8, test-mssql] runs-on: ubuntu-latest steps: @@ -275,4 +275,4 @@ jobs: go-version: ">=1.20" check-latest: true - uses: actions/download-artifact@v3 - - run: make coverage test-coverage-check + - run: make coverage check-backend-coverage diff --git a/Makefile b/Makefile index f9a4bdeb8b697..2f8586a6dc01d 100644 --- a/Makefile +++ b/Makefile @@ -220,7 +220,7 @@ help: @echo " - test test everything" @echo " - test-frontend test frontend files" @echo " - test-backend test backend files" - @echo " - test-coverage-check check package coverage in tests" + @echo " - check-backend-coverage check backend package coverage" @echo " - test-e2e[\#TestSpecificName] test end to end using playwright" @echo " - webpack build webpack files" @echo " - svg build svg files" @@ -471,8 +471,8 @@ unit-test-coverage: @echo "Running unit-test-coverage $(GOTESTFLAGS) -tags '$(TEST_TAGS)'..." @$(GO) test $(GOTESTFLAGS) -timeout=20m -tags='$(TEST_TAGS)' -cover -coverprofile coverage.out $(GO_TEST_PACKAGES) && echo "\n==>\033[32m Ok\033[m\n" || exit 1 -.PHONY: test-coverage-check -test-coverage-check: +.PHONY: check-backend-coverage +check-backend-coverage: @$(GO) run build/gocoverage.go check coverage.all tests/coverage_requirement.txt .PHONY: tidy diff --git a/build/gocoverage.go b/build/gocoverage.go index ce8a37166769a..b4e72a63d1475 100644 --- a/build/gocoverage.go +++ b/build/gocoverage.go @@ -15,7 +15,7 @@ import ( "log" "math" "os" - "path" + "path/filepath" "sort" "strconv" "strings" @@ -132,14 +132,14 @@ func showUsage() { Commands: %[1]s merge ... - %[1]s check [coverage_file] [package=percent] ... + %[1]s check coverage_file requirement_file.txt Arguments: {file-list} the file list Example: - %[1]s merge -s -d {file-list} - %[1]s check coverage.out code.gitea.io/gitea/modules/setting=4%% + %[1]s merge {file-list} + %[1]s check coverage.out requirement_file.txt `, "gocoverage") } @@ -208,7 +208,7 @@ func checkPackages(args []string) { packagesTotals := make(map[string]int64) packagesActives := make(map[string]int64) for _, p := range profiles { - pkg := path.Dir(p.FileName) + pkg := filepath.Dir(p.FileName) _, ok := packagesRequirements[pkg] if !ok { continue @@ -221,7 +221,7 @@ func checkPackages(args []string) { for k, v := range packagesRequirements { actual := 100 * float64(packagesActives[k]) / float64(packagesTotals[k]) if v > int64(math.Floor(actual*10+0.5)) { - log.Printf("package %s coverage is %.1f%%, required %.1f%%\n", k, actual, float64(v)/10.0) + log.Printf("package %s coverage is %.1f%%, required %.1f%%", k, actual, float64(v)/10.0) failed = true } } From cbad4929ab4a00b284ab56bde4e6dc317a43f959 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 17 Jun 2023 10:51:09 +0800 Subject: [PATCH 09/10] Fix check --- .github/workflows/pull-db-tests.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pull-db-tests.yml b/.github/workflows/pull-db-tests.yml index 562ee36564882..179fdada9a02d 100644 --- a/.github/workflows/pull-db-tests.yml +++ b/.github/workflows/pull-db-tests.yml @@ -275,4 +275,5 @@ jobs: go-version: ">=1.20" check-latest: true - uses: actions/download-artifact@v3 - - run: make coverage check-backend-coverage + - run: $(GO) run build/gocoverage.go merge unit-test-coverage/coverage.out unit-test-coverage-gogit/coverage.out unit-test-coverage-integration/coverage.out > coverage.all + - run: make check-backend-coverage From d9b221ea56c94bbd78dcd3f5df22c9ac47dea8e8 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 17 Jun 2023 11:36:26 +0800 Subject: [PATCH 10/10] Fix test --- .github/workflows/pull-db-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull-db-tests.yml b/.github/workflows/pull-db-tests.yml index 179fdada9a02d..a67203394ab70 100644 --- a/.github/workflows/pull-db-tests.yml +++ b/.github/workflows/pull-db-tests.yml @@ -275,5 +275,5 @@ jobs: go-version: ">=1.20" check-latest: true - uses: actions/download-artifact@v3 - - run: $(GO) run build/gocoverage.go merge unit-test-coverage/coverage.out unit-test-coverage-gogit/coverage.out unit-test-coverage-integration/coverage.out > coverage.all + - run: go run build/gocoverage.go merge unit-test-coverage/coverage.out unit-test-coverage-gogit/coverage.out unit-test-coverage-integration/coverage.out > coverage.all - run: make check-backend-coverage