Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package forgejo-runner for openSUSE:Factory checked in at 2025-01-22 17:15:37 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/forgejo-runner (Old) and /work/SRC/openSUSE:Factory/.forgejo-runner.new.5589 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "forgejo-runner" Wed Jan 22 17:15:37 2025 rev:11 rq:1239541 version:6.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/forgejo-runner/forgejo-runner.changes 2025-01-19 21:49:25.022520866 +0100 +++ /work/SRC/openSUSE:Factory/.forgejo-runner.new.5589/forgejo-runner.changes 2025-01-22 17:15:38.831073423 +0100 @@ -1,0 +2,14 @@ +Wed Jan 22 13:49:49 UTC 2025 - [email protected] + +- Update to version 6.1.0: + * chore(release): migrate to invisible.forgejo.org (#444) + * Update module google.golang.org/protobuf to v1.36.3 (#440) + * Update actions/setup-forgejo action to v2.0.6 + * fix: upgrade forgejo-build-publish/[email protected] + * fix: use data.forgejo.org/oci + * New "one shot" type of execution by adding a new command called one-job. (#423) + * fix: example uses code.forgejo.org/oci + * chore(docs): 6.1.0 release notes (#428) + * expose "ForceRebuild" as a config option + +------------------------------------------------------------------- Old: ---- forgejo-runner-6.0.1.obscpio New: ---- forgejo-runner-6.1.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ forgejo-runner.spec ++++++ --- /var/tmp/diff_new_pack.Fc8Uys/_old 2025-01-22 17:15:40.315135265 +0100 +++ /var/tmp/diff_new_pack.Fc8Uys/_new 2025-01-22 17:15:40.319135432 +0100 @@ -17,7 +17,7 @@ Name: forgejo-runner -Version: 6.0.1 +Version: 6.1.0 Release: 0 Summary: Daemon that connects to a Forgejo instance and runs CI jobs License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.Fc8Uys/_old 2025-01-22 17:15:40.379137932 +0100 +++ /var/tmp/diff_new_pack.Fc8Uys/_new 2025-01-22 17:15:40.383138099 +0100 @@ -2,7 +2,7 @@ <service name="obs_scm" mode="manual"> <param name="url">https://code.forgejo.org/forgejo/runner</param> <param name="scm">git</param> - <param name="revision">refs/tags/v6.0.1</param> + <param name="revision">refs/tags/v6.1.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">enable</param> <param name="versionrewrite-pattern">v(.*)</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.Fc8Uys/_old 2025-01-22 17:15:40.411139266 +0100 +++ /var/tmp/diff_new_pack.Fc8Uys/_new 2025-01-22 17:15:40.423139766 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://code.forgejo.org/forgejo/runner</param> - <param name="changesrevision">f415dc9c34e9c8e146893f87fd430d011d91350e</param></service></servicedata> + <param name="changesrevision">94f94a56d48ea3da3479a3b9e90e643e23ebb148</param></service></servicedata> (No newline at EOF) ++++++ forgejo-runner-6.0.1.obscpio -> forgejo-runner-6.1.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/.forgejo/workflows/build-release-integration.yml new/forgejo-runner-6.1.0/.forgejo/workflows/build-release-integration.yml --- old/forgejo-runner-6.0.1/.forgejo/workflows/build-release-integration.yml 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/.forgejo/workflows/build-release-integration.yml 2025-01-22 11:35:09.000000000 +0100 @@ -24,7 +24,7 @@ - uses: actions/checkout@v4 - id: forgejo - uses: https://code.forgejo.org/actions/[email protected] + uses: https://data.forgejo.org/actions/[email protected] with: user: root password: admin1234 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/.forgejo/workflows/build-release.yml new/forgejo-runner-6.1.0/.forgejo/workflows/build-release.yml --- old/forgejo-runner-6.0.1/.forgejo/workflows/build-release.yml 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/.forgejo/workflows/build-release.yml 2025-01-22 11:35:09.000000000 +0100 @@ -71,7 +71,7 @@ - name: build without TOKEN if: ${{ secrets.TOKEN == '' }} - uses: https://code.forgejo.org/forgejo/forgejo-build-publish/build@v5 + uses: https://code.forgejo.org/forgejo/forgejo-build-publish/[email protected] with: forgejo: "${{ env.GITHUB_SERVER_URL }}" owner: "${{ env.GITHUB_REPOSITORY_OWNER }}" @@ -88,7 +88,7 @@ - name: build with TOKEN if: ${{ secrets.TOKEN != '' }} - uses: https://code.forgejo.org/forgejo/forgejo-build-publish/build@v5 + uses: https://code.forgejo.org/forgejo/forgejo-build-publish/[email protected] with: forgejo: "${{ env.GITHUB_SERVER_URL }}" owner: "${{ env.GITHUB_REPOSITORY_OWNER }}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/.forgejo/workflows/publish-release.yml new/forgejo-runner-6.1.0/.forgejo/workflows/publish-release.yml --- old/forgejo-runner-6.0.1/.forgejo/workflows/publish-release.yml 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/.forgejo/workflows/publish-release.yml 2025-01-22 11:35:09.000000000 +0100 @@ -1,17 +1,16 @@ # SPDX-License-Identifier: MIT # -# https://forgejo.octopuce.forgejo.org/forgejo-release/runner +# https://invisible.forgejo.org/forgejo/runner # # Copies & sign a release from code.forgejo.org/forgejo-integration/runner to code.forgejo.org/forgejo/runner # -# ROLE: forgejo-release -# FORGEJO: https://code.forgejo.org -# FROM_OWNER: forgejo-integration -# TO_OWNER: forgejo -# DOER: release-team -# TOKEN: <generated from codeberg.org/release-team> -# GPG_PRIVATE_KEY: <XYZ> -# GPG_PASSPHRASE: <ABC> +# vars.FORGEJO: https://code.forgejo.org +# vars.FROM_OWNER: forgejo-integration +# vars.TO_OWNER: forgejo +# vars.DOER: release-team +# secrets.TOKEN: <generated from code.forgejo.org/release-team> +# secrets.GPG_PRIVATE_KEY: <XYZ> +# secrets.GPG_PASSPHRASE: <ABC> # name: publish @@ -23,25 +22,25 @@ jobs: publish: runs-on: lxc-bookworm - if: secrets.DOER != '' && secrets.FORGEJO != '' && secrets.TO_OWNER != '' && secrets.FROM_OWNER != '' && secrets.TOKEN != '' + if: vars.DOER != '' && vars.FORGEJO != '' && vars.TO_OWNER != '' && vars.FROM_OWNER != '' && secrets.TOKEN != '' steps: - - uses: actions/checkout@v4 + - uses: https://data.forgejo.org/actions/checkout@v4 - name: copy & sign - uses: https://code.forgejo.org/forgejo/forgejo-build-publish/[email protected] + uses: https://data.forgejo.org/forgejo/forgejo-build-publish/[email protected] with: - from-forgejo: ${{ secrets.FORGEJO }} - to-forgejo: ${{ secrets.FORGEJO }} - from-owner: ${{ secrets.FROM_OWNER }} - to-owner: ${{ secrets.TO_OWNER }} + from-forgejo: ${{ vars.FORGEJO }} + to-forgejo: ${{ vars.FORGEJO }} + from-owner: ${{ vars.FROM_OWNER }} + to-owner: ${{ vars.TO_OWNER }} repo: "runner" release-notes: "See https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#{ANCHOR}" ref-name: ${{ github.ref_name }} sha: ${{ github.sha }} container-suffixes: " " from-token: ${{ secrets.TOKEN }} - to-doer: ${{ secrets.DOER }} + to-doer: ${{ vars.DOER }} to-token: ${{ secrets.TOKEN }} gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} gpg-passphrase: ${{ secrets.GPG_PASSPHRASE }} - verbose: ${{ secrets.VERBOSE }} + verbose: ${{ vars.VERBOSE }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/RELEASE-NOTES.md new/forgejo-runner-6.1.0/RELEASE-NOTES.md --- old/forgejo-runner-6.0.1/RELEASE-NOTES.md 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/RELEASE-NOTES.md 2025-01-22 11:35:09.000000000 +0100 @@ -1,5 +1,10 @@ # Release Notes +## 6.1.0 + +* [Add `[container].force_rebuild` config option](https://code.forgejo.org/forgejo/runner/pulls/406) to force rebuilding of local docker images, even if they are already present. +* [Add new `--one-job` flag](https://code.forgejo.org/forgejo/runner/pulls/423) to execute a previously configured runner, execute one task if it exists and exit. Motivation [here](https://code.forgejo.org/forgejo/runner/issues/422) + ## 6.0.1 * [Fixes a regression](https://code.forgejo.org/forgejo/runner/issues/425) that was introduced in version 6.0.0 by which the `[container].options` config file setting was ignored. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/examples/docker/README.md new/forgejo-runner-6.1.0/examples/docker/README.md --- old/forgejo-runner-6.0.1/examples/docker/README.md 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/examples/docker/README.md 2025-01-22 11:35:09.000000000 +0100 @@ -6,7 +6,7 @@ * a `runner-config.yml` file exists in /tmp/data ```sh -docker run -v /var/run/docker.sock:/var/run/docker.sock -v /tmp/data:/data --user 1000:133 --rm code.forgejo.org/forgejo/runner:5.0.4 forgejo-runner --config runner-config.yaml daemon +docker run -v /var/run/docker.sock:/var/run/docker.sock -v /tmp/data:/data --user 1000:133 --rm code.forgejo.org/forgejo/runner:6.0.1 forgejo-runner --config runner-config.yaml daemon ``` -The workflows will run using the host docker srever +The workflows will run using the host docker server diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/examples/docker-compose/README.md new/forgejo-runner-6.1.0/examples/docker-compose/README.md --- old/forgejo-runner-6.0.1/examples/docker-compose/README.md 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/examples/docker-compose/README.md 2025-01-22 11:35:09.000000000 +0100 @@ -80,8 +80,9 @@ on: [push] jobs: test: - runs-on: docker + runs-on: node-bookworm steps: + - uses: https://code.forgejo.org/actions/checkout@v4 - run: echo All Good ``` @@ -91,7 +92,7 @@ on: [push] jobs: test_docker: - runs-on: ubuntu-22.04 + runs-on: docker-cli steps: - run: docker info ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/examples/docker-compose/compose-demo-workflow.yml new/forgejo-runner-6.1.0/examples/docker-compose/compose-demo-workflow.yml --- old/forgejo-runner-6.0.1/examples/docker-compose/compose-demo-workflow.yml 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/examples/docker-compose/compose-demo-workflow.yml 2025-01-22 11:35:09.000000000 +0100 @@ -4,7 +4,7 @@ services: demo-workflow: - image: code.forgejo.org/oci/alpine:3.19 + image: code.forgejo.org/oci/alpine:3.21 links: - forgejo command: >- @@ -14,8 +14,8 @@ cd /srv/demo ; git init --initial-branch=main ; mkdir -p .forgejo/workflows ; - echo "{ on: [push], jobs: { test: { runs-on: docker, steps: [ {uses: actions/checkout@v4}, { run: echo All Good } ] } } }" > .forgejo/workflows/demo.yml ; - echo "{ on: [push], jobs: { test_docker: { runs-on: ubuntu-22.04, steps: [ { run: docker info } ] } } }" > .forgejo/workflows/demo_docker.yml ; + echo "{ on: [push], jobs: { test: { runs-on: node-bookworm, steps: [ {uses: https://code.forgejo.org/actions/checkout@v4}, { run: echo All Good } ] } } }" > .forgejo/workflows/demo.yml ; + echo "{ on: [push], jobs: { test_docker: { runs-on: docker-cli, steps: [ { run: docker info, shell: sh } ] } } }" > .forgejo/workflows/demo_docker.yml ; git add . ; git config user.email [email protected] ; git config user.name username ; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/examples/docker-compose/compose-forgejo-and-runner.yml new/forgejo-runner-6.1.0/examples/docker-compose/compose-forgejo-and-runner.yml --- old/forgejo-runner-6.0.1/examples/docker-compose/compose-forgejo-and-runner.yml 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/examples/docker-compose/compose-forgejo-and-runner.yml 2025-01-22 11:35:09.000000000 +0100 @@ -30,7 +30,7 @@ - docker_certs:/certs forgejo: - image: codeberg.org/forgejo/forgejo:1.21 + image: codeberg.org/forgejo/forgejo:9.0 command: >- bash -c ' /bin/s6-svscan /etc/s6 & @@ -51,7 +51,7 @@ - 8080:3000 runner-register: - image: code.forgejo.org/forgejo/runner:5.0.4 + image: code.forgejo.org/forgejo/runner:6.0.1 links: - docker-in-docker - forgejo @@ -66,7 +66,7 @@ forgejo-runner create-runner-file --connect --instance http://forgejo:3000 --name runner --secret {SHARED_SECRET} && break ; sleep 1 ; done ; - sed -i -e "s|\"labels\": null|\"labels\": [\"docker:docker://code.forgejo.org/oci/node:20-bookworm\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" .runner ; + sed -i -e "s|\"labels\": null|\"labels\": [\"docker-cli:docker://code.forgejo.org/oci/docker:cli\",\"node-bookworm:docker://code.forgejo.org/oci/node:20-bookworm\"]|" .runner ; forgejo-runner generate-config > config.yml ; sed -i -e "s| level: info| level: debug|" config.yml ; sed -i -e "s|network: .*|network: host|" config.yml ; @@ -77,7 +77,7 @@ ' runner-daemon: - image: code.forgejo.org/forgejo/runner:5.0.4 + image: code.forgejo.org/forgejo/runner:6.0.1 links: - docker-in-docker - forgejo diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/examples/kubernetes/dind-docker.yaml new/forgejo-runner-6.1.0/examples/kubernetes/dind-docker.yaml --- old/forgejo-runner-6.0.1/examples/kubernetes/dind-docker.yaml 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/examples/kubernetes/dind-docker.yaml 2025-01-22 11:35:09.000000000 +0100 @@ -38,7 +38,7 @@ # https://forgejo.org/docs/v1.21/admin/actions/#offline-registration initContainers: - name: runner-register - image: code.forgejo.org/forgejo/runner:5.0.4 + image: code.forgejo.org/forgejo/runner:6.0.1 command: ["forgejo-runner", "register", "--no-interactive", "--token", $(RUNNER_SECRET), "--name", $(RUNNER_NAME), "--instance", $(FORGEJO_INSTANCE_URL)] env: - name: RUNNER_NAME @@ -61,7 +61,7 @@ mountPath: /data containers: - name: runner - image: code.forgejo.org/forgejo/runner:5.0.4 + image: code.forgejo.org/forgejo/runner:6.0.1 command: ["sh", "-c", "while ! nc -z localhost 2376 </dev/null; do echo 'waiting for docker daemon...'; sleep 5; done; forgejo-runner daemon"] env: - name: DOCKER_HOST diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/go.mod new/forgejo-runner-6.1.0/go.mod --- old/forgejo-runner-6.0.1/go.mod 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/go.mod 2025-01-22 11:35:09.000000000 +0100 @@ -2,7 +2,7 @@ go 1.23 -toolchain go1.23.4 +toolchain go1.23.5 require ( code.gitea.io/actions-proto-go v0.4.0 @@ -19,7 +19,7 @@ github.com/stretchr/testify v1.10.0 golang.org/x/term v0.28.0 golang.org/x/time v0.9.0 - google.golang.org/protobuf v1.36.2 + google.golang.org/protobuf v1.36.3 gopkg.in/yaml.v3 v3.0.1 gotest.tools/v3 v3.5.1 ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/go.sum new/forgejo-runner-6.1.0/go.sum --- old/forgejo-runner-6.0.1/go.sum 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/go.sum 2025-01-22 11:35:09.000000000 +0100 @@ -293,8 +293,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= -google.golang.org/protobuf v1.36.2 h1:R8FeyR1/eLmkutZOM5CWghmo5itiG9z0ktFlTVLuTmU= -google.golang.org/protobuf v1.36.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU= +google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/internal/app/cmd/cmd.go new/forgejo-runner-6.1.0/internal/app/cmd/cmd.go --- old/forgejo-runner-6.0.1/internal/app/cmd/cmd.go 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/internal/app/cmd/cmd.go 2025-01-22 11:35:09.000000000 +0100 @@ -52,6 +52,15 @@ } rootCmd.AddCommand(daemonCmd) + // ./act_runner job + jobCmd := &cobra.Command{ + Use: "one-job", + Short: "Run only one job", + Args: cobra.MaximumNArgs(1), + RunE: runJob(ctx, &configFile), + } + rootCmd.AddCommand(jobCmd) + // ./act_runner exec rootCmd.AddCommand(loadExecCmd(ctx)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/internal/app/cmd/job.go new/forgejo-runner-6.1.0/internal/app/cmd/job.go --- old/forgejo-runner-6.0.1/internal/app/cmd/job.go 1970-01-01 01:00:00.000000000 +0100 +++ new/forgejo-runner-6.1.0/internal/app/cmd/job.go 2025-01-22 11:35:09.000000000 +0100 @@ -0,0 +1,117 @@ +// Copyright 2025 The Forgejo Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package cmd + +import ( + "context" + "fmt" + "os" + "strings" + + "connectrpc.com/connect" + log "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + + "gitea.com/gitea/act_runner/internal/app/job" + "gitea.com/gitea/act_runner/internal/app/run" + "gitea.com/gitea/act_runner/internal/pkg/client" + "gitea.com/gitea/act_runner/internal/pkg/config" + "gitea.com/gitea/act_runner/internal/pkg/envcheck" + "gitea.com/gitea/act_runner/internal/pkg/labels" + "gitea.com/gitea/act_runner/internal/pkg/ver" +) + +func runJob(ctx context.Context, configFile *string) func(cmd *cobra.Command, args []string) error { + return func(cmd *cobra.Command, args []string) error { + cfg, err := config.LoadDefault(*configFile) + if err != nil { + return fmt.Errorf("invalid configuration: %w", err) + } + + initLogging(cfg) + log.Infoln("Starting job") + + reg, err := config.LoadRegistration(cfg.Runner.File) + if os.IsNotExist(err) { + log.Error("registration file not found, please register the runner first") + return err + } else if err != nil { + return fmt.Errorf("failed to load registration file: %w", err) + } + + lbls := reg.Labels + if len(cfg.Runner.Labels) > 0 { + lbls = cfg.Runner.Labels + } + + ls := labels.Labels{} + for _, l := range lbls { + label, err := labels.Parse(l) + if err != nil { + log.WithError(err).Warnf("ignored invalid label %q", l) + continue + } + ls = append(ls, label) + } + if len(ls) == 0 { + log.Warn("no labels configured, runner may not be able to pick up jobs") + } + + if ls.RequireDocker() { + dockerSocketPath, err := getDockerSocketPath(cfg.Container.DockerHost) + if err != nil { + return err + } + if err := envcheck.CheckIfDockerRunning(ctx, dockerSocketPath); err != nil { + return err + } + // if dockerSocketPath passes the check, override DOCKER_HOST with dockerSocketPath + os.Setenv("DOCKER_HOST", dockerSocketPath) + // empty cfg.Container.DockerHost means act_runner need to find an available docker host automatically + // and assign the path to cfg.Container.DockerHost + if cfg.Container.DockerHost == "" { + cfg.Container.DockerHost = dockerSocketPath + } + // check the scheme, if the scheme is not npipe or unix + // set cfg.Container.DockerHost to "-" because it can't be mounted to the job container + if protoIndex := strings.Index(cfg.Container.DockerHost, "://"); protoIndex != -1 { + scheme := cfg.Container.DockerHost[:protoIndex] + if !strings.EqualFold(scheme, "npipe") && !strings.EqualFold(scheme, "unix") { + cfg.Container.DockerHost = "-" + } + } + } + + cli := client.New( + reg.Address, + cfg.Runner.Insecure, + reg.UUID, + reg.Token, + ver.Version(), + ) + + runner := run.NewRunner(cfg, reg, cli) + // declare the labels of the runner before fetching tasks + resp, err := runner.Declare(ctx, ls.Names()) + if err != nil && connect.CodeOf(err) == connect.CodeUnimplemented { + // Gitea instance is older version. skip declare step. + log.Warn("Because the Forgejo instance is an old version, skipping declaring the labels and version.") + } else if err != nil { + log.WithError(err).Error("fail to invoke Declare") + return err + } else { + log.Infof("runner: %s, with version: %s, with labels: %v, declared successfully", + resp.Msg.Runner.Name, resp.Msg.Runner.Version, resp.Msg.Runner.Labels) + // if declared successfully, override the labels in the.runner file with valid labels in the config file (if specified) + runner.Update(ctx, ls) + reg.Labels = ls.ToStrings() + if err := config.SaveRegistration(cfg.Runner.File, reg); err != nil { + return fmt.Errorf("failed to save runner config: %w", err) + } + } + + j := job.NewJob(cfg, cli, runner) + return j.Run(ctx) + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/internal/app/cmd/register.go new/forgejo-runner-6.1.0/internal/app/cmd/register.go --- old/forgejo-runner-6.0.1/internal/app/cmd/register.go 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/internal/app/cmd/register.go 2025-01-22 11:35:09.000000000 +0100 @@ -91,7 +91,7 @@ ) var defaultLabels = []string{ - "docker:docker://node:20-bullseye", + "docker:docker://data.forgejo.org/oci/node:20-bullseye", } type registerInputs struct { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/internal/app/job/job.go new/forgejo-runner-6.1.0/internal/app/job/job.go --- old/forgejo-runner-6.0.1/internal/app/job/job.go 1970-01-01 01:00:00.000000000 +0100 +++ new/forgejo-runner-6.1.0/internal/app/job/job.go 2025-01-22 11:35:09.000000000 +0100 @@ -0,0 +1,94 @@ +// Copyright 2025 The Forgejo Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package job + +import ( + "context" + "errors" + "fmt" + "sync/atomic" + + "connectrpc.com/connect" + log "github.com/sirupsen/logrus" + + runnerv1 "code.gitea.io/actions-proto-go/runner/v1" + "gitea.com/gitea/act_runner/internal/app/run" + "gitea.com/gitea/act_runner/internal/pkg/client" + "gitea.com/gitea/act_runner/internal/pkg/config" +) + +type Job struct { + client client.Client + runner run.RunnerInterface + cfg *config.Config + tasksVersion atomic.Int64 +} + +func NewJob(cfg *config.Config, client client.Client, runner run.RunnerInterface) *Job { + j := &Job{} + + j.client = client + j.runner = runner + j.cfg = cfg + + return j +} + +func (j *Job) Run(ctx context.Context) error { + task, ok := j.fetchTask(ctx) + if !ok { + return fmt.Errorf("could not fetch task") + } + return j.runTaskWithRecover(ctx, task) +} + +func (j *Job) runTaskWithRecover(ctx context.Context, task *runnerv1.Task) error { + defer func() { + if r := recover(); r != nil { + err := fmt.Errorf("panic: %v", r) + log.WithError(err).Error("panic in runTaskWithRecover") + } + }() + + if err := j.runner.Run(ctx, task); err != nil { + log.WithError(err).Error("failed to run task") + return err + } + return nil +} + +func (j *Job) fetchTask(ctx context.Context) (*runnerv1.Task, bool) { + reqCtx, cancel := context.WithTimeout(ctx, j.cfg.Runner.FetchTimeout) + defer cancel() + + // Load the version value that was in the cache when the request was sent. + v := j.tasksVersion.Load() + resp, err := j.client.FetchTask(reqCtx, connect.NewRequest(&runnerv1.FetchTaskRequest{ + TasksVersion: v, + })) + if err != nil { + if errors.Is(err, context.Canceled) { + log.WithError(err).Debugf("shutdown, fetch task canceled") + } else { + log.WithError(err).Error("failed to fetch task") + } + return nil, false + } + + if resp == nil || resp.Msg == nil { + return nil, false + } + + if resp.Msg.TasksVersion > v { + j.tasksVersion.CompareAndSwap(v, resp.Msg.TasksVersion) + } + + if resp.Msg.Task == nil { + return nil, false + } + + j.tasksVersion.CompareAndSwap(resp.Msg.TasksVersion, 0) + + return resp.Msg.Task, true +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/internal/app/job/job_test.go new/forgejo-runner-6.1.0/internal/app/job/job_test.go --- old/forgejo-runner-6.0.1/internal/app/job/job_test.go 1970-01-01 01:00:00.000000000 +0100 +++ new/forgejo-runner-6.1.0/internal/app/job/job_test.go 2025-01-22 11:35:09.000000000 +0100 @@ -0,0 +1,169 @@ +package job + +import ( + "context" + "fmt" + "testing" + "time" + + "connectrpc.com/connect" + + "code.gitea.io/actions-proto-go/ping/v1/pingv1connect" + runnerv1 "code.gitea.io/actions-proto-go/runner/v1" + "code.gitea.io/actions-proto-go/runner/v1/runnerv1connect" + "gitea.com/gitea/act_runner/internal/pkg/config" + + log "github.com/sirupsen/logrus" + "github.com/stretchr/testify/assert" +) + +type mockClient struct { + pingv1connect.PingServiceClient + runnerv1connect.RunnerServiceClient + + sleep time.Duration + cancel bool + err error + noTask bool +} + +func (o mockClient) Address() string { + return "" +} + +func (o mockClient) Insecure() bool { + return true +} + +func (o *mockClient) FetchTask(ctx context.Context, _ *connect.Request[runnerv1.FetchTaskRequest]) (*connect.Response[runnerv1.FetchTaskResponse], error) { + if o.sleep > 0 { + select { + case <-ctx.Done(): + log.Trace("fetch task done") + return nil, context.DeadlineExceeded + case <-time.After(o.sleep): + log.Trace("slept") + return nil, fmt.Errorf("unexpected") + } + } + if o.cancel { + return nil, context.Canceled + } + if o.err != nil { + return nil, o.err + } + task := &runnerv1.Task{} + if o.noTask { + task = nil + o.noTask = false + } + + return connect.NewResponse(&runnerv1.FetchTaskResponse{ + Task: task, + TasksVersion: int64(1), + }), nil +} + +type mockRunner struct { + cfg *config.Runner + log chan string + panics bool + err error +} + +func (o *mockRunner) Run(ctx context.Context, _ *runnerv1.Task) error { + o.log <- "runner starts" + if o.panics { + log.Trace("panics") + o.log <- "runner panics" + o.panics = false + panic("whatever") + } + if o.err != nil { + log.Trace("error") + o.log <- "runner error" + err := o.err + o.err = nil + return err + } + for { + select { + case <-ctx.Done(): + log.Trace("shutdown") + o.log <- "runner shutdown" + return nil + case <-time.After(o.cfg.Timeout): + log.Trace("after") + o.log <- "runner timeout" + return nil + } + } +} + +func TestNewJob(t *testing.T) { + j := NewJob(&config.Config{}, &mockClient{}, &mockRunner{}) + assert.NotNil(t, j) +} + +func setTrace(t *testing.T) { + t.Helper() + log.SetReportCaller(true) + log.SetLevel(log.TraceLevel) +} + +func TestJob_fetchTask(t *testing.T) { + setTrace(t) + for _, testCase := range []struct { + name string + noTask bool + sleep time.Duration + err error + cancel bool + success bool + }{ + { + name: "Success", + success: true, + }, + { + name: "Canceled", + cancel: true, + }, + { + name: "NoTask", + noTask: true, + }, + { + name: "Error", + err: fmt.Errorf("random error"), + }, + } { + t.Run(testCase.name, func(t *testing.T) { + configRunner := config.Runner{ + FetchTimeout: 1 * time.Millisecond, + } + + j := NewJob( + &config.Config{ + Runner: configRunner, + }, + &mockClient{ + sleep: testCase.sleep, + cancel: testCase.cancel, + noTask: testCase.noTask, + err: testCase.err, + }, + &mockRunner{}, + ) + + task, ok := j.fetchTask(context.Background()) + if testCase.success { + assert.True(t, ok) + assert.NotNil(t, task) + } else { + assert.False(t, ok) + assert.Nil(t, task) + } + }) + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/internal/app/run/runner.go new/forgejo-runner-6.1.0/internal/app/run/runner.go --- old/forgejo-runner-6.0.1/internal/app/run/runner.go 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/internal/app/run/runner.go 2025-01-22 11:35:09.000000000 +0100 @@ -209,7 +209,7 @@ ReuseContainers: false, ForcePull: r.cfg.Container.ForcePull, - ForceRebuild: false, + ForceRebuild: r.cfg.Container.ForceRebuild, LogOutput: true, JSONLogger: false, Env: r.envs, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/internal/pkg/config/config.example.yaml new/forgejo-runner-6.1.0/internal/pkg/config/config.example.yaml --- old/forgejo-runner-6.0.1/internal/pkg/config/config.example.yaml 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/internal/pkg/config/config.example.yaml 2025-01-22 11:35:09.000000000 +0100 @@ -95,6 +95,8 @@ docker_host: "-" # Pull docker image(s) even if already present force_pull: false + # Rebuild local docker image(s) even if already present + force_rebuild: false host: # The parent directory of a job's working directory. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/internal/pkg/config/config.go new/forgejo-runner-6.1.0/internal/pkg/config/config.go --- old/forgejo-runner-6.0.1/internal/pkg/config/config.go 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/internal/pkg/config/config.go 2025-01-22 11:35:09.000000000 +0100 @@ -55,6 +55,7 @@ ValidVolumes []string `yaml:"valid_volumes"` // ValidVolumes specifies the volumes (including bind mounts) can be mounted to containers. DockerHost string `yaml:"docker_host"` // DockerHost specifies the Docker host. It overrides the value specified in environment variable DOCKER_HOST. ForcePull bool `yaml:"force_pull"` // Pull docker image(s) even if already present + ForceRebuild bool `yaml:"force_rebuild"` // Rebuild local docker image(s) even if already present } // Host represents the configuration for the host. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forgejo-runner-6.0.1/internal/pkg/config/config_test.go new/forgejo-runner-6.1.0/internal/pkg/config/config_test.go --- old/forgejo-runner-6.0.1/internal/pkg/config/config_test.go 2025-01-11 15:53:02.000000000 +0100 +++ new/forgejo-runner-6.1.0/internal/pkg/config/config_test.go 2025-01-22 11:35:09.000000000 +0100 @@ -42,4 +42,5 @@ assert.EqualValues(t, config.Container.DockerHost, "-") assert.EqualValues(t, config.Log.JobLevel, "info") + assert.EqualValues(t, config.Container.ForceRebuild, false) } ++++++ forgejo-runner.obsinfo ++++++ --- /var/tmp/diff_new_pack.Fc8Uys/_old 2025-01-22 17:15:40.623148101 +0100 +++ /var/tmp/diff_new_pack.Fc8Uys/_new 2025-01-22 17:15:40.627148267 +0100 @@ -1,5 +1,5 @@ name: forgejo-runner -version: 6.0.1 -mtime: 1736607182 -commit: f415dc9c34e9c8e146893f87fd430d011d91350e +version: 6.1.0 +mtime: 1737542109 +commit: 94f94a56d48ea3da3479a3b9e90e643e23ebb148 ++++++ vendor.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/encoding/protojson/decode.go new/vendor/google.golang.org/protobuf/encoding/protojson/decode.go --- old/vendor/google.golang.org/protobuf/encoding/protojson/decode.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/encoding/protojson/decode.go 2025-01-22 14:51:59.000000000 +0100 @@ -192,7 +192,7 @@ fd = fieldDescs.ByTextName(name) } } - if flags.ProtoLegacy { + if flags.ProtoLegacyWeak { if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() { fd = nil // reset since the weak reference is not linked in } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/encoding/prototext/decode.go new/vendor/google.golang.org/protobuf/encoding/prototext/decode.go --- old/vendor/google.golang.org/protobuf/encoding/prototext/decode.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/encoding/prototext/decode.go 2025-01-22 14:51:59.000000000 +0100 @@ -185,7 +185,7 @@ } else if xtErr != nil && xtErr != protoregistry.NotFound { return d.newError(tok.Pos(), "unable to resolve [%s]: %v", tok.RawString(), xtErr) } - if flags.ProtoLegacy { + if flags.ProtoLegacyWeak { if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() { fd = nil // reset since the weak reference is not linked in } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/internal/flags/flags.go new/vendor/google.golang.org/protobuf/internal/flags/flags.go --- old/vendor/google.golang.org/protobuf/internal/flags/flags.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/internal/flags/flags.go 2025-01-22 14:51:59.000000000 +0100 @@ -22,3 +22,8 @@ // extension fields at unmarshal time, but defers creating the message // structure until the extension is first accessed. const LazyUnmarshalExtensions = ProtoLegacy + +// ProtoLegacyWeak specifies whether to enable support for weak fields. +// This flag was split out of ProtoLegacy in preparation for removing +// support for weak fields (independent of the other protolegacy features). +const ProtoLegacyWeak = ProtoLegacy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/internal/impl/codec_map.go new/vendor/google.golang.org/protobuf/internal/impl/codec_map.go --- old/vendor/google.golang.org/protobuf/internal/impl/codec_map.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/internal/impl/codec_map.go 2025-01-22 14:51:59.000000000 +0100 @@ -94,7 +94,7 @@ return 0 } n := 0 - iter := mapRange(mapv) + iter := mapv.MapRange() for iter.Next() { key := mapi.conv.keyConv.PBValueOf(iter.Key()).MapKey() keySize := mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts) @@ -281,7 +281,7 @@ if opts.Deterministic() { return appendMapDeterministic(b, mapv, mapi, f, opts) } - iter := mapRange(mapv) + iter := mapv.MapRange() for iter.Next() { var err error b = protowire.AppendVarint(b, f.wiretag) @@ -328,7 +328,7 @@ if !mi.needsInitCheck { return nil } - iter := mapRange(mapv) + iter := mapv.MapRange() for iter.Next() { val := pointerOfValue(iter.Value()) if err := mi.checkInitializedPointer(val); err != nil { @@ -336,7 +336,7 @@ } } } else { - iter := mapRange(mapv) + iter := mapv.MapRange() for iter.Next() { val := mapi.conv.valConv.PBValueOf(iter.Value()) if err := mapi.valFuncs.isInit(val); err != nil { @@ -356,7 +356,7 @@ if dstm.IsNil() { dstm.Set(reflect.MakeMap(f.ft)) } - iter := mapRange(srcm) + iter := srcm.MapRange() for iter.Next() { dstm.SetMapIndex(iter.Key(), iter.Value()) } @@ -371,7 +371,7 @@ if dstm.IsNil() { dstm.Set(reflect.MakeMap(f.ft)) } - iter := mapRange(srcm) + iter := srcm.MapRange() for iter.Next() { dstm.SetMapIndex(iter.Key(), reflect.ValueOf(append(emptyBuf[:], iter.Value().Bytes()...))) } @@ -386,7 +386,7 @@ if dstm.IsNil() { dstm.Set(reflect.MakeMap(f.ft)) } - iter := mapRange(srcm) + iter := srcm.MapRange() for iter.Next() { val := reflect.New(f.ft.Elem().Elem()) if f.mi != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go new/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go --- old/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go 1970-01-01 01:00:00.000000000 +0100 @@ -1,38 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.12 -// +build !go1.12 - -package impl - -import "reflect" - -type mapIter struct { - v reflect.Value - keys []reflect.Value -} - -// mapRange provides a less-efficient equivalent to -// the Go 1.12 reflect.Value.MapRange method. -func mapRange(v reflect.Value) *mapIter { - return &mapIter{v: v} -} - -func (i *mapIter) Next() bool { - if i.keys == nil { - i.keys = i.v.MapKeys() - } else { - i.keys = i.keys[1:] - } - return len(i.keys) > 0 -} - -func (i *mapIter) Key() reflect.Value { - return i.keys[0] -} - -func (i *mapIter) Value() reflect.Value { - return i.v.MapIndex(i.keys[0]) -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go new/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go --- old/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go 1970-01-01 01:00:00.000000000 +0100 @@ -1,12 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.12 -// +build go1.12 - -package impl - -import "reflect" - -func mapRange(v reflect.Value) *reflect.MapIter { return v.MapRange() } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/internal/impl/codec_message.go new/vendor/google.golang.org/protobuf/internal/impl/codec_message.go --- old/vendor/google.golang.org/protobuf/internal/impl/codec_message.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/internal/impl/codec_message.go 2025-01-22 14:51:59.000000000 +0100 @@ -118,12 +118,12 @@ }, } case isOneof: - fieldOffset = offsetOf(fs, mi.Exporter) + fieldOffset = offsetOf(fs) case fd.IsWeak(): fieldOffset = si.weakOffset funcs = makeWeakMessageFieldCoder(fd) default: - fieldOffset = offsetOf(fs, mi.Exporter) + fieldOffset = offsetOf(fs) childMessage, funcs = fieldCoder(fd, ft) } cf := &preallocFields[i] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go new/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go --- old/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go 2025-01-22 14:51:59.000000000 +0100 @@ -45,19 +45,19 @@ var childMessage *MessageInfo switch { case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic(): - fieldOffset = offsetOf(fs, mi.Exporter) + fieldOffset = offsetOf(fs) case fd.IsWeak(): fieldOffset = si.weakOffset funcs = makeWeakMessageFieldCoder(fd) case fd.Message() != nil && !fd.IsMap(): - fieldOffset = offsetOf(fs, mi.Exporter) + fieldOffset = offsetOf(fs) if fd.IsList() { childMessage, funcs = makeOpaqueRepeatedMessageFieldCoder(fd, ft) } else { childMessage, funcs = makeOpaqueMessageFieldCoder(fd, ft) } default: - fieldOffset = offsetOf(fs, mi.Exporter) + fieldOffset = offsetOf(fs) childMessage, funcs = fieldCoder(fd, ft) } cf := &coderFieldInfo{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/internal/impl/convert_map.go new/vendor/google.golang.org/protobuf/internal/impl/convert_map.go --- old/vendor/google.golang.org/protobuf/internal/impl/convert_map.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/internal/impl/convert_map.go 2025-01-22 14:51:59.000000000 +0100 @@ -101,7 +101,7 @@ return v } func (ms *mapReflect) Range(f func(protoreflect.MapKey, protoreflect.Value) bool) { - iter := mapRange(ms.v) + iter := ms.v.MapRange() for iter.Next() { k := ms.keyConv.PBValueOf(iter.Key()).MapKey() v := ms.valConv.PBValueOf(iter.Value()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/internal/impl/message.go new/vendor/google.golang.org/protobuf/internal/impl/message.go --- old/vendor/google.golang.org/protobuf/internal/impl/message.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/internal/impl/message.go 2025-01-22 14:51:59.000000000 +0100 @@ -165,28 +165,28 @@ switch f := t.Field(i); f.Name { case genid.SizeCache_goname, genid.SizeCacheA_goname: if f.Type == sizecacheType { - si.sizecacheOffset = offsetOf(f, mi.Exporter) + si.sizecacheOffset = offsetOf(f) si.sizecacheType = f.Type } case genid.WeakFields_goname, genid.WeakFieldsA_goname: if f.Type == weakFieldsType { - si.weakOffset = offsetOf(f, mi.Exporter) + si.weakOffset = offsetOf(f) si.weakType = f.Type } case genid.UnknownFields_goname, genid.UnknownFieldsA_goname: if f.Type == unknownFieldsAType || f.Type == unknownFieldsBType { - si.unknownOffset = offsetOf(f, mi.Exporter) + si.unknownOffset = offsetOf(f) si.unknownType = f.Type } case genid.ExtensionFields_goname, genid.ExtensionFieldsA_goname, genid.ExtensionFieldsB_goname: if f.Type == extensionFieldsType { - si.extensionOffset = offsetOf(f, mi.Exporter) + si.extensionOffset = offsetOf(f) si.extensionType = f.Type } case "lazyFields", "XXX_lazyUnmarshalInfo": - si.lazyOffset = offsetOf(f, mi.Exporter) + si.lazyOffset = offsetOf(f) case "XXX_presence": - si.presenceOffset = offsetOf(f, mi.Exporter) + si.presenceOffset = offsetOf(f) default: for _, s := range strings.Split(f.Tag.Get("protobuf"), ",") { if len(s) > 0 && strings.Trim(s, "0123456789") == "" { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go new/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go --- old/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go 2025-01-22 14:51:59.000000000 +0100 @@ -142,7 +142,7 @@ if ft.Kind() != reflect.Map { panic(fmt.Sprintf("invalid type: got %v, want map kind", ft)) } - fieldOffset := offsetOf(fs, mi.Exporter) + fieldOffset := offsetOf(fs) conv := NewConverter(ft, fd) return fieldInfo{ fieldDesc: fd, @@ -196,7 +196,7 @@ panic(fmt.Sprintf("invalid type: got %v, want slice kind", ft)) } conv := NewConverter(reflect.PtrTo(ft), fd) - fieldOffset := offsetOf(fs, mi.Exporter) + fieldOffset := offsetOf(fs) index, _ := presenceIndex(mi.Desc, fd) return fieldInfo{ fieldDesc: fd, @@ -246,7 +246,7 @@ panic(fmt.Sprintf("invalid type: got %v, want slice kind", ft)) } conv := NewConverter(ft, fd) - fieldOffset := offsetOf(fs, mi.Exporter) + fieldOffset := offsetOf(fs) index, _ := presenceIndex(mi.Desc, fd) fieldNumber := fd.Number() return fieldInfo{ @@ -339,7 +339,7 @@ panic(fmt.Sprintf("invalid type: got %v, want slice kind", ft)) } conv := NewConverter(ft, fd) - fieldOffset := offsetOf(fs, mi.Exporter) + fieldOffset := offsetOf(fs) return fieldInfo{ fieldDesc: fd, has: func(p pointer) bool { @@ -411,7 +411,7 @@ deref = true } conv := NewConverter(ft, fd) - fieldOffset := offsetOf(fs, mi.Exporter) + fieldOffset := offsetOf(fs) index, _ := presenceIndex(mi.Desc, fd) var getter func(p pointer) protoreflect.Value if !nullable { @@ -480,7 +480,7 @@ func (mi *MessageInfo) fieldInfoForMessageOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo { ft := fs.Type conv := NewConverter(ft, fd) - fieldOffset := offsetOf(fs, mi.Exporter) + fieldOffset := offsetOf(fs) index, _ := presenceIndex(mi.Desc, fd) fieldNumber := fd.Number() elemType := fs.Type.Elem() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go new/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go --- old/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go 2025-01-22 14:51:59.000000000 +0100 @@ -76,7 +76,7 @@ isMessage := fd.Message() != nil // TODO: Implement unsafe fast path? - fieldOffset := offsetOf(fs, x) + fieldOffset := offsetOf(fs) return fieldInfo{ // NOTE: The logic below intentionally assumes that oneof fields are // well-formatted. That is, the oneof interface never contains a @@ -152,7 +152,7 @@ conv := NewConverter(ft, fd) // TODO: Implement unsafe fast path? - fieldOffset := offsetOf(fs, x) + fieldOffset := offsetOf(fs) return fieldInfo{ fieldDesc: fd, has: func(p pointer) bool { @@ -205,7 +205,7 @@ conv := NewConverter(reflect.PtrTo(ft), fd) // TODO: Implement unsafe fast path? - fieldOffset := offsetOf(fs, x) + fieldOffset := offsetOf(fs) return fieldInfo{ fieldDesc: fd, has: func(p pointer) bool { @@ -269,7 +269,7 @@ } } conv := NewConverter(ft, fd) - fieldOffset := offsetOf(fs, x) + fieldOffset := offsetOf(fs) // Generate specialized getter functions to avoid going through reflect.Value if nullable { @@ -333,7 +333,7 @@ } func fieldInfoForWeakMessage(fd protoreflect.FieldDescriptor, weakOffset offset) fieldInfo { - if !flags.ProtoLegacy { + if !flags.ProtoLegacyWeak { panic("no support for proto1 weak fields") } @@ -410,7 +410,7 @@ conv := NewConverter(ft, fd) // TODO: Implement unsafe fast path? - fieldOffset := offsetOf(fs, x) + fieldOffset := offsetOf(fs) return fieldInfo{ fieldDesc: fd, has: func(p pointer) bool { @@ -419,7 +419,7 @@ } rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() if fs.Type.Kind() != reflect.Ptr { - return !isZero(rv) + return !rv.IsZero() } return !rv.IsNil() }, @@ -466,7 +466,7 @@ oi := &oneofInfo{oneofDesc: od} if od.IsSynthetic() { fs := si.fieldsByNumber[od.Fields().Get(0).Number()] - fieldOffset := offsetOf(fs, x) + fieldOffset := offsetOf(fs) oi.which = func(p pointer) protoreflect.FieldNumber { if p.IsNil() { return 0 @@ -479,7 +479,7 @@ } } else { fs := si.oneofsByName[od.Name()] - fieldOffset := offsetOf(fs, x) + fieldOffset := offsetOf(fs) oi.which = func(p pointer) protoreflect.FieldNumber { if p.IsNil() { return 0 @@ -497,41 +497,3 @@ } return oi } - -// isZero is identical to reflect.Value.IsZero. -// TODO: Remove this when Go1.13 is the minimally supported Go version. -func isZero(v reflect.Value) bool { - switch v.Kind() { - case reflect.Bool: - return !v.Bool() - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return v.Int() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return v.Uint() == 0 - case reflect.Float32, reflect.Float64: - return math.Float64bits(v.Float()) == 0 - case reflect.Complex64, reflect.Complex128: - c := v.Complex() - return math.Float64bits(real(c)) == 0 && math.Float64bits(imag(c)) == 0 - case reflect.Array: - for i := 0; i < v.Len(); i++ { - if !isZero(v.Index(i)) { - return false - } - } - return true - case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice, reflect.UnsafePointer: - return v.IsNil() - case reflect.String: - return v.Len() == 0 - case reflect.Struct: - for i := 0; i < v.NumField(); i++ { - if !isZero(v.Field(i)) { - return false - } - } - return true - default: - panic(&reflect.ValueError{Method: "reflect.Value.IsZero", Kind: v.Kind()}) - } -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go new/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go --- old/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go 2025-01-22 14:51:59.000000000 +0100 @@ -22,7 +22,7 @@ type offset uintptr // offsetOf returns a field offset for the struct field. -func offsetOf(f reflect.StructField, x exporter) offset { +func offsetOf(f reflect.StructField) offset { return offset(f.Offset) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/internal/version/version.go new/vendor/google.golang.org/protobuf/internal/version/version.go --- old/vendor/google.golang.org/protobuf/internal/version/version.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/internal/version/version.go 2025-01-22 14:51:59.000000000 +0100 @@ -52,7 +52,7 @@ const ( Major = 1 Minor = 36 - Patch = 2 + Patch = 3 PreRelease = "" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/google.golang.org/protobuf/proto/decode.go new/vendor/google.golang.org/protobuf/proto/decode.go --- old/vendor/google.golang.org/protobuf/proto/decode.go 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/google.golang.org/protobuf/proto/decode.go 2025-01-22 14:51:59.000000000 +0100 @@ -172,7 +172,7 @@ var err error if fd == nil { err = errUnknown - } else if flags.ProtoLegacy { + } else if flags.ProtoLegacyWeak { if fd.IsWeak() && fd.Message().IsPlaceholder() { err = errUnknown // weak referent is not linked in } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt --- old/vendor/modules.txt 2025-01-18 17:38:37.000000000 +0100 +++ new/vendor/modules.txt 2025-01-22 14:51:59.000000000 +0100 @@ -491,7 +491,7 @@ golang.org/x/tools/internal/tokeninternal golang.org/x/tools/internal/typesinternal golang.org/x/tools/internal/versions -# google.golang.org/protobuf v1.36.2 +# google.golang.org/protobuf v1.36.3 ## explicit; go 1.21 google.golang.org/protobuf/encoding/protojson google.golang.org/protobuf/encoding/prototext
