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

Reply via email to