Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jan 8, 2026

  • Update manifest.json to move Alpine floating tags from alpine3.22 to alpine3.23 for:
    • .NET 8.0 (runtime-deps, runtime, aspnet, sdk)
    • .NET 9.0 (runtime-deps, runtime, aspnet, sdk)
    • .NET 10.0 (runtime-deps, runtime, aspnet, sdk)
  • Fixed duplicate tag issue - floating tags now appear only once per repo
  • Updated alpine|floating-tag-version in manifest.versions.json from alpine3.22 to alpine3.23
  • Regenerated READMEs from templates to reflect Alpine 3.23 floating tags
  • Run code review (passed)
  • Run security check (no security issues)

This change moves the Alpine floating tags (e.g., 8.0-alpine, 9.0-alpine-amd64) from the Alpine 3.22 images to Alpine 3.23 images, following the supported tags policy that specifies floating tags should be updated one month after new Alpine versions are added.

Note: .NET 11.0 was already correctly configured (only has alpine3.23, so no changes needed).

Original prompt

According to the supported tags policy under documentation/ Alpine floating tags should be moved to the latest alpine version one month after new alpine images are added. Since we added alpine images in December 2025, and it is now January 2026, please move the Alpine floating tags from 3.22 to 3.23.

Custom agent used: image-manager
Manages .NET Docker images including adding images for new .NET versions, new Linux distros (Alpine, Ubuntu, Azure Linux), and new Windows versions. Handles Dockerfile templates, manifest updates, test data, and README generation.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI changed the title [WIP] Update Alpine floating tags to version 3.23 Move Alpine floating tags from 3.22 to 3.23 Jan 8, 2026
Copilot AI requested a review from lbussell January 8, 2026 23:56
@lbussell
Copy link
Member

lbussell commented Jan 9, 2026

@copilot there's an error in the PreBuildValidation stage:

Unhandled exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
  ---> Microsoft.DotNet.ImageBuilder.ValidationException: Duplicate tags found: 
 $(dotnet|8.0|minor-tag)-alpine
 $(dotnet|9.0|minor-tag)-alpine
 $(dotnet|10.0|minor-tag)-alpine
 $(dotnet|8.0|minor-tag)-alpine-amd64
 $(dotnet|8.0|minor-tag)-alpine-arm32v7
 $(dotnet|8.0|minor-tag)-alpine-arm64v8
 $(dotnet|9.0|minor-tag)-alpine-amd64
 $(dotnet|9.0|minor-tag)-alpine-arm32v7
 $(dotnet|9.0|minor-tag)-alpine-arm64v8
 $(dotnet|10.0|minor-tag)-alpine-amd64
 $(dotnet|10.0|minor-tag)-alpine-arm32v7
 $(dotnet|10.0|minor-tag)-alpine-arm64v8

Copy link
Contributor Author

Copilot AI commented Jan 9, 2026

@copilot there's an error in the PreBuildValidation stage:

Unhandled exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.

...

Fixed in fa4d5f1. The issue was that my script incorrectly added floating tags to ALL alpine3.23 sections (including -extra, -composite, -aot variants) instead of only the base alpine sections. The fix properly moves floating tags from alpine3.22 to alpine3.23 sections without creating duplicates.

@richlander
Copy link
Member

Failure to watch: dotnet/runtime#123035

Might not be a big issue as it might not be 3.23-specific.

@lbussell
Copy link
Member

lbussell commented Jan 9, 2026

@copilot The duplicate tags have been fixed, but pre-build validation is still failing. You need to update the alpine floating tag designation in manifest.versions.json. Then, make sure that pre-build validation tests pass by running them.

Copy link
Contributor Author

Copilot AI commented Jan 9, 2026

@copilot The duplicate tags have been fixed, but pre-build validation is still failing. You need to update the alpine floating tag designation in manifest.versions.json. Then, make sure that pre-build...

Fixed in 9dc4404. Updated alpine|floating-tag-version in manifest.versions.json from alpine3.22 to alpine3.23. Pre-build validation tests cannot be run locally due to network restrictions, but the changes are consistent with the manifest.json updates.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 11vvsblobprodcus336.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • 1k9vsblobprodcus379.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • 1s1vsblobprodcus386.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • 37cvsblobprodcus359.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • 5rqvsblobprodcus385.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • 96bvsblobprodcus338.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • aka.ms
    • Triggering command: /usr/bin/curl curl -I -sSL --retry 5 --retry-delay 2 --connect-timeout 15 REDACTED (dns block)
  • frdvsblobprodcus327.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • gervsblobprodcus329.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • h6tvsblobprodcus346.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • ibzvsblobprodcus369.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • jd4vsblobprodcus366.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • josvsblobprodcus372.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • kmuvsblobprodcus389.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • l49vsblobprodcus358.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • m8dvsblobprodcus37.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • n3kvsblobprodcus335.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • p2ovsblobprodcus312.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • pe4vsblobprodcus351.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • u6ovsblobprodcus377.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • vb4vsblobprodcus33.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • vwvvsblobprodcus334.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)
  • yluvsblobprodcus367.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter Category=pre-build --logger:trx .100/microsoft.net.sdk.maui (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

@lbussell
Copy link
Member

lbussell commented Jan 9, 2026

@copilot The Readmes are out of sync with the templates. Update the Readmes by running eng/readme-templates/Get-GeneratedReadmes.ps1.

Copy link
Contributor Author

Copilot AI commented Jan 9, 2026

@copilot The Readmes are out of sync with the templates. Update the Readmes by running eng/readme-templates/Get-GeneratedReadmes.ps1.

Fixed in a262798. Regenerated READMEs using eng/readme-templates/Get-GeneratedReadmes.ps1 to update the tag tables to reflect the Alpine 3.23 floating tags.

@lbussell lbussell marked this pull request as ready for review January 9, 2026 18:09
@lbussell lbussell requested a review from a team as a code owner January 9, 2026 18:09
@lbussell lbussell merged commit a60652f into nightly Jan 9, 2026
82 checks passed
@lbussell
Copy link
Member

lbussell commented Jan 9, 2026

/backport to release/2026-01B

@github-actions
Copy link
Contributor

github-actions bot commented Jan 9, 2026

Started backporting to release/2026-01B (link to workflow run)

@github-actions
Copy link
Contributor

github-actions bot commented Jan 9, 2026

@lbussell backporting to release/2026-01B failed during automated conflict resolution. Please backport manually!

Error details

pwsh ./eng/dockerfile-templates/Get-GeneratedDockerfiles.ps1 && pwsh ./eng/readme-templates/Get-GeneratedReadmes.ps1 stderr:

Error: No such object: mcr.microsoft.com/dotnet-buildtools/image-builder:2864167
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile.WithRepo
#1 transferring dockerfile: 146B done
#1 WARN: InvalidDefaultArgInFrom: Default value for ARG $IMAGE results in empty or invalid base image name (line 3)
#1 DONE 0.0s

#2 [internal] load metadata for mcr.microsoft.com/dotnet-buildtools/image-builder:2864167
#2 DONE 0.0s

#3 [internal] load .dockerignore
#3 transferring context: 107B done
#3 DONE 0.0s

#4 [1/3] FROM mcr.microsoft.com/dotnet-buildtools/image-builder:2864167
#4 DONE 0.0s

#5 [2/3] WORKDIR /repo
#5 DONE 0.0s

#6 [internal] load build context
#6 transferring context: 54.14MB 0.4s done
#6 DONE 0.4s

#7 [3/3] COPY . .
#7 DONE 0.4s

#8 exporting to image
#8 exporting layers
#8 exporting layers 0.8s done
#8 writing image sha256:b71facba0c585befc3ffea85de267a4fc93a002a6b347126e9109d77c93a9e99 done
#8 naming to docker.io/library/microsoft-dotnet-imagebuilder-withrepo done
#8 DONE 0.8s

 �[33m1 warning found (use docker --debug to expand):
�[0m - InvalidDefaultArgInFrom: Default value for ARG $IMAGE results in empty or invalid base image name (line 3)
Unhandled exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
 ---> Newtonsoft.Json.JsonReaderException: Invalid property identifier character: <. Path 'variables.base-url|public-checksums|preview|nightly', line 15, position 0.
   at Newtonsoft.Json.JsonTextReader.ParseProperty()
   at Newtonsoft.Json.JsonTextReader.ParseObject()
   at Newtonsoft.Json.JsonTextReader.Read()
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateDictionary(IDictionary dictionary, JsonReader reader, JsonDictionaryContract contract, JsonProperty containerProperty, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
   at Microsoft.DotNet.ImageBuilder.ViewModel.ManifestInfo.LoadModel(String path, String manifestDirectory) in /image-builder/ImageBuilder/ViewModel/ManifestInfo.cs:line 258
   at Microsoft.DotNet.ImageBuilder.ViewModel.ManifestInfo.Create(String manifestPath, ManifestFilter manifestFilter, IManifestOptionsInfo options) in /image-builder/ImageBuilder/ViewModel/ManifestInfo.cs:line 62
   at Microsoft.DotNet.ImageBuilder.ViewModel.ManifestInfo.Load(IManifestOptionsInfo options) in /image-builder/ImageBuilder/ViewModel/ManifestInfo.cs:line 46
   at Microsoft.DotNet.ImageBuilder.Commands.ManifestCommand`2.LoadManifest() in /image-builder/ImageBuilder/Commands/ManifestCommand.cs:line 19
   at Microsoft.DotNet.ImageBuilder.Commands.ManifestCommand`2.Initialize(TOptions options) in /image-builder/ImageBuilder/Commands/ManifestCommand.cs:line 26
   at Microsoft.DotNet.ImageBuilder.Commands.Command`2.<GetCliCommand>b__9_0(TOptions options) in /image-builder/ImageBuilder/Commands/Command.TOptions.cs:line 55
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
   --- End of inner exception stack trace ---
   at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
   at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Delegate.DynamicInvokeImpl(Object[] args)
   at System.CommandLine.Invocation.ModelBindingCommandHandler.InvokeAsync(InvocationContext context)
   at System.CommandLine.Invocation.InvocationPipeline.<>c__DisplayClass4_0.<<BuildInvocationChain>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<UseParseErrorReporting>b__21_0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass19_0.<<UseMiddleware>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass16_0.<<UseHelp>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass25_0.<<UseVersionOption>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass23_0.<<UseTypoCorrections>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<UseSuggestDirective>b__22_0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<UseParseDirective>b__20_0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<UseDebugDirective>b__11_0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<RegisterWithDotnetSuggest>b__10_0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass14_0.<<UseExceptionHandler>b__0>d.MoveNext()

Link to workflow output

lbussell added a commit to lbussell/dotnet-docker that referenced this pull request Jan 9, 2026
Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: lbussell <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants