Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package docker-compose for openSUSE:Factory checked in at 2025-01-13 17:53:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/docker-compose (Old) and /work/SRC/openSUSE:Factory/.docker-compose.new.1881 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "docker-compose" Mon Jan 13 17:53:43 2025 rev:57 rq:1237443 version:2.32.3 Changes: -------- --- /work/SRC/openSUSE:Factory/docker-compose/docker-compose.changes 2025-01-09 15:07:48.505227045 +0100 +++ /work/SRC/openSUSE:Factory/.docker-compose.new.1881/docker-compose.changes 2025-01-13 17:53:46.323662862 +0100 @@ -1,0 +2,11 @@ +Mon Jan 13 14:53:04 UTC 2025 - opensuse_buildserv...@ojkastl.de + +- Update to version 2.32.3: + * ci: update bake-action to v6 + * simplification + * image can be set to a local ID, that isn't a valid docker ref + * can't render progress concurrently with buildkit + * exclude one-off container running convergence + * Only override service mac if set on the main network. + +------------------------------------------------------------------- Old: ---- docker-compose-2.32.2.obscpio New: ---- docker-compose-2.32.3.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ docker-compose.spec ++++++ --- /var/tmp/diff_new_pack.pMB5W6/_old 2025-01-13 17:53:50.715844415 +0100 +++ /var/tmp/diff_new_pack.pMB5W6/_new 2025-01-13 17:53:50.715844415 +0100 @@ -16,10 +16,8 @@ # -%define __arch_install_post export NO_BRP_STRIP_DEBUG=true - Name: docker-compose -Version: 2.32.2 +Version: 2.32.3 Release: 0 Summary: Define and run multi-container applications with Docker License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.pMB5W6/_old 2025-01-13 17:53:50.747845737 +0100 +++ /var/tmp/diff_new_pack.pMB5W6/_new 2025-01-13 17:53:50.751845903 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/docker/compose</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v2.32.2</param> + <param name="revision">v2.32.3</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.pMB5W6/_old 2025-01-13 17:53:50.779847060 +0100 +++ /var/tmp/diff_new_pack.pMB5W6/_new 2025-01-13 17:53:50.783847225 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/docker/compose</param> - <param name="changesrevision">d474515d4574ab64faabe717d6e771672d72eb53</param></service></servicedata> + <param name="changesrevision">083f676214409113be442d066e7c10441db7c426</param></service></servicedata> (No newline at EOF) ++++++ docker-compose-2.32.2.obscpio -> docker-compose-2.32.3.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-compose-2.32.2/.github/workflows/ci.yml new/docker-compose-2.32.3/.github/workflows/ci.yml --- old/docker-compose-2.32.2/.github/workflows/ci.yml 2025-01-07 14:59:47.000000000 +0100 +++ new/docker-compose-2.32.3/.github/workflows/ci.yml 2025-01-13 12:41:14.000000000 +0100 @@ -77,9 +77,6 @@ platform=${{ matrix.platform }} echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - - name: Checkout - uses: actions/checkout@v4 - - name: Set up QEMU uses: docker/setup-qemu-action@v3 - @@ -87,7 +84,7 @@ uses: docker/setup-buildx-action@v3 - name: Build - uses: docker/bake-action@v5 + uses: docker/bake-action@v6 with: targets: release set: | @@ -106,14 +103,11 @@ runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Test - uses: docker/bake-action@v5 + uses: docker/bake-action@v6 with: targets: test set: | @@ -149,9 +143,10 @@ mode=${{ matrix.mode }} engine=${{ matrix.engine }} echo "MODE_ENGINE_PAIR=${mode}-${engine}" >> $GITHUB_ENV - - - name: Checkout + + - name: Checkout uses: actions/checkout@v4 + - name: Install Docker ${{ matrix.engine }} run: | sudo systemctl stop docker.service @@ -159,22 +154,24 @@ sudo apt-get install curl curl -fsSL https://test.docker.com -o get-docker.sh sudo sh ./get-docker.sh --version ${{ matrix.engine }} + - name: Check Docker Version run: docker --version - - - name: Set up Docker Buildx + + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - - name: Set up Go + + - name: Set up Go uses: actions/setup-go@v5 with: go-version-file: 'go.mod' check-latest: true cache: true - - - name: Build - uses: docker/bake-action@v5 + + - name: Build + uses: docker/bake-action@v6 with: + source: . targets: binary-with-coverage set: | *.cache-from=type=gha,scope=binary-linux-amd64 @@ -182,37 +179,37 @@ *.cache-to=type=gha,scope=binary-e2e-${{ matrix.mode }},mode=max env: BUILD_TAGS: e2e - - - name: Setup tmate session + + - name: Setup tmate session if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled }} uses: mxschmitt/action-tmate@8b4e4ac71822ed7e0ad5fb3d1c33483e9e8fb270 # v3.11 with: limit-access-to-actor: true github-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Test plugin mode + + - name: Test plugin mode if: ${{ matrix.mode == 'plugin' }} run: | rm -rf ./bin/coverage/e2e mkdir -p ./bin/coverage/e2e make e2e-compose GOCOVERDIR=bin/coverage/e2e TEST_FLAGS="-v" - - - name: Gather coverage data + + - name: Gather coverage data if: ${{ matrix.mode == 'plugin' }} uses: actions/upload-artifact@v4 with: name: coverage-data-e2e-${{ env.MODE_ENGINE_PAIR }} path: bin/coverage/e2e/ if-no-files-found: error - - - name: Test standalone mode + + - name: Test standalone mode if: ${{ matrix.mode == 'standalone' }} run: | rm -f /usr/local/bin/docker-compose cp bin/build/docker-compose /usr/local/bin make e2e-compose-standalone - - - name: e2e Test Summary + + - name: e2e Test Summary uses: test-summary/action@v2 with: paths: /tmp/report/report.xml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-compose-2.32.2/.github/workflows/merge.yml new/docker-compose-2.32.3/.github/workflows/merge.yml --- old/docker-compose-2.32.2/.github/workflows/merge.yml 2025-01-07 14:59:47.000000000 +0100 +++ new/docker-compose-2.32.3/.github/workflows/merge.yml 2025-01-13 12:41:14.000000000 +0100 @@ -80,8 +80,12 @@ digest: ${{ fromJSON(steps.bake.outputs.metadata).image-cross['containerimage.digest'] }} steps: - - name: Checkout - uses: actions/checkout@v4 + name: Login to DockerHub + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERPUBLICBOT_USERNAME }} + password: ${{ secrets.DOCKERPUBLICBOT_WRITE_PAT }} - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -100,27 +104,20 @@ type=edge bake-target: meta-helper - - name: Login to DockerHub - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERPUBLICBOT_USERNAME }} - password: ${{ secrets.DOCKERPUBLICBOT_WRITE_PAT }} - - name: Build and push image uses: docker/bake-action@v5 id: bake with: files: | ./docker-bake.hcl - ${{ steps.meta.outputs.bake-file }} + cwd://${{ steps.meta.outputs.bake-file }} targets: image-cross push: ${{ github.event_name != 'pull_request' }} + sbom: true + provenance: mode=max set: | *.cache-from=type=gha,scope=bin-image *.cache-to=type=gha,scope=bin-image,mode=max - *.attest=type=sbom - *.attest=type=provenance,mode=max,builder-id=https://github.com/${{ env.GITHUB_REPOSITORY }}/actions/runs/${{ env.GITHUB_RUN_ID }} desktop-edge-test: runs-on: ubuntu-latest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-compose-2.32.2/pkg/compose/build.go new/docker-compose-2.32.3/pkg/compose/build.go --- old/docker-compose-2.32.2/pkg/compose/build.go 2025-01-07 14:59:47.000000000 +0100 +++ new/docker-compose-2.32.3/pkg/compose/build.go 2025-01-13 12:41:14.000000000 +0100 @@ -150,12 +150,13 @@ } return -1 } + + cw := progress.ContextWriter(ctx) err = InDependencyOrder(ctx, project, func(ctx context.Context, name string) error { service, ok := serviceToBuild[name] if !ok { return nil } - cw := progress.ContextWriter(ctx) serviceName := fmt.Sprintf("Service %s", name) if !buildkitEnabled { @@ -182,12 +183,10 @@ return err } - cw.Event(progress.BuildingEvent(serviceName)) digest, err := s.doBuildBuildkit(ctx, name, buildOptions, w, nodes) if err != nil { return err } - cw.Event(progress.BuiltEvent(serviceName)) builtDigests[getServiceIndex(name)] = digest return nil @@ -211,6 +210,7 @@ service := project.Services[names[i]] imageRef := api.GetImageNameOrDefault(service, project.Name) imageIDs[imageRef] = imageDigest + cw.Event(progress.BuiltEvent(names[i])) } } return imageIDs, err diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-compose-2.32.2/pkg/compose/containers.go new/docker-compose-2.32.3/pkg/compose/containers.go --- old/docker-compose-2.32.2/pkg/compose/containers.go 2025-01-07 14:59:47.000000000 +0100 +++ new/docker-compose-2.32.3/pkg/compose/containers.go 2025-01-13 12:41:14.000000000 +0100 @@ -114,6 +114,15 @@ // containerPredicate define a predicate we want container to satisfy for filtering operations type containerPredicate func(c moby.Container) bool +func matches(c moby.Container, predicates ...containerPredicate) bool { + for _, predicate := range predicates { + if !predicate(c) { + return false + } + } + return true +} + func isService(services ...string) containerPredicate { return func(c moby.Container) bool { service := c.Labels[api.ServiceLabel] @@ -148,10 +157,10 @@ } // filter return Containers with elements to match predicate -func (containers Containers) filter(predicate containerPredicate) Containers { +func (containers Containers) filter(predicates ...containerPredicate) Containers { var filtered Containers for _, c := range containers { - if predicate(c) { + if matches(c, predicates...) { filtered = append(filtered, c) } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-compose-2.32.2/pkg/compose/convergence.go new/docker-compose-2.32.3/pkg/compose/convergence.go --- old/docker-compose-2.32.2/pkg/compose/convergence.go 2025-01-07 14:59:47.000000000 +0100 +++ new/docker-compose-2.32.3/pkg/compose/convergence.go 2025-01-13 12:41:14.000000000 +0100 @@ -460,7 +460,7 @@ continue } - waitingFor := containers.filter(isService(dep)) + waitingFor := containers.filter(isService(dep), isNotOneOff) w.Events(containerEvents(waitingFor, progress.Waiting)) if len(waitingFor) == 0 { if config.Required { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-compose-2.32.2/pkg/compose/create.go new/docker-compose-2.32.3/pkg/compose/create.go --- old/docker-compose-2.32.2/pkg/compose/create.go 2025-01-07 14:59:47.000000000 +0100 +++ new/docker-compose-2.32.3/pkg/compose/create.go 2025-01-13 12:41:14.000000000 +0100 @@ -416,7 +416,7 @@ return "", fmt.Errorf("a MAC address is specified for multiple networks (%s), but this feature requires Docker Engine 1.44 or later (currently: %s)", strings.Join(withMacAddress, ", "), version) } - if mainNw != nil { + if mainNw != nil && mainNw.MacAddress != "" { macAddress = mainNw.MacAddress } } @@ -424,11 +424,11 @@ return macAddress, nil } -func getAliases(project *types.Project, service types.ServiceConfig, serviceIndex int, networkKey string, useNetworkAliases bool) []string { +func getAliases(project *types.Project, service types.ServiceConfig, serviceIndex int, cfg *types.ServiceNetworkConfig, useNetworkAliases bool) []string { aliases := []string{getContainerName(project.Name, service, serviceIndex)} if useNetworkAliases { aliases = append(aliases, service.Name) - if cfg := service.Networks[networkKey]; cfg != nil { + if cfg != nil { aliases = append(aliases, cfg.Aliases...) } } @@ -456,7 +456,7 @@ driverOpts = config.DriverOpts } return &network.EndpointSettings{ - Aliases: getAliases(p, service, serviceIndex, networkKey, useNetworkAliases), + Aliases: getAliases(p, service, serviceIndex, config, useNetworkAliases), Links: links, IPAddress: ipv4Address, IPv6Gateway: ipv6Address, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-compose-2.32.2/pkg/compose/images.go new/docker-compose-2.32.3/pkg/compose/images.go --- old/docker-compose-2.32.2/pkg/compose/images.go 2025-01-07 14:59:47.000000000 +0100 +++ new/docker-compose-2.32.3/pkg/compose/images.go 2025-01-13 12:41:14.000000000 +0100 @@ -94,12 +94,12 @@ tag := "" repository := "" ref, err := reference.ParseDockerRef(repoTag) - if err != nil { - return err - } - repository = reference.FamiliarName(ref) - if tagged, ok := ref.(reference.Tagged); ok { - tag = tagged.Tag() + if err == nil { + // ParseDockerRef will reject a local image ID + repository = reference.FamiliarName(ref) + if tagged, ok := ref.(reference.Tagged); ok { + tag = tagged.Tag() + } } l.Lock() summary[repoTag] = api.ImageSummary{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-compose-2.32.2/pkg/e2e/fixtures/simple-composefile/id.yaml new/docker-compose-2.32.3/pkg/e2e/fixtures/simple-composefile/id.yaml --- old/docker-compose-2.32.2/pkg/e2e/fixtures/simple-composefile/id.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/docker-compose-2.32.3/pkg/e2e/fixtures/simple-composefile/id.yaml 2025-01-13 12:41:14.000000000 +0100 @@ -0,0 +1,3 @@ +services: + test: + image: ${ID:?ID variable must be set} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-compose-2.32.2/pkg/e2e/up_test.go new/docker-compose-2.32.3/pkg/e2e/up_test.go --- old/docker-compose-2.32.2/pkg/e2e/up_test.go 2025-01-07 14:59:47.000000000 +0100 +++ new/docker-compose-2.32.3/pkg/e2e/up_test.go 2025-01-13 12:41:14.000000000 +0100 @@ -191,3 +191,18 @@ assert.Assert(t, strings.Contains(res.Combined(), `Container foo_c Created`), res.Combined()) assert.Assert(t, !strings.Contains(res.Combined(), `Container bar_c Created`), res.Combined()) } + +func TestUpImageID(t *testing.T) { + c := NewCLI(t) + const projectName = "compose-e2e-up-image-id" + + digest := strings.TrimSpace(c.RunDockerCmd(t, "image", "inspect", "alpine", "-f", "{{ .ID }}").Stdout()) + _, id, _ := strings.Cut(digest, ":") + + t.Cleanup(func() { + c.RunDockerComposeCmd(t, "--project-name", projectName, "down", "-v") + }) + + c = NewCLI(t, WithEnv(fmt.Sprintf("ID=%s", id))) + c.RunDockerComposeCmd(t, "-f", "./fixtures/simple-composefile/id.yaml", "--project-name", projectName, "up") +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-compose-2.32.2/pkg/progress/tty.go new/docker-compose-2.32.3/pkg/progress/tty.go --- old/docker-compose-2.32.2/pkg/progress/tty.go 2025-01-07 14:59:47.000000000 +0100 +++ new/docker-compose-2.32.3/pkg/progress/tty.go 2025-01-13 12:41:14.000000000 +0100 @@ -167,7 +167,7 @@ _, _ = fmt.Fprint(w.out, aec.Show) }() - firstLine := fmt.Sprintf("[+] %s %d/%d", w.progressTitle, numDone(w.events), w.numLines) + firstLine := fmt.Sprintf("[+] %s %d/%d", w.progressTitle, numDone(w.events), len(w.events)) if w.numLines != 0 && numDone(w.events) == w.numLines { firstLine = DoneColor(firstLine) } ++++++ docker-compose.obsinfo ++++++ --- /var/tmp/diff_new_pack.pMB5W6/_old 2025-01-13 17:53:51.071859131 +0100 +++ /var/tmp/diff_new_pack.pMB5W6/_new 2025-01-13 17:53:51.075859296 +0100 @@ -1,5 +1,5 @@ name: docker-compose -version: 2.32.2 -mtime: 1736258387 -commit: d474515d4574ab64faabe717d6e771672d72eb53 +version: 2.32.3 +mtime: 1736768474 +commit: 083f676214409113be442d066e7c10441db7c426 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/docker-compose/vendor.tar.gz /work/SRC/openSUSE:Factory/.docker-compose.new.1881/vendor.tar.gz differ: char 5, line 1