Skip to content

Add update notifications for daily/continuous builds#6656

Draft
Copilot wants to merge 7 commits intomainfrom
copilot/add-build-notifications
Draft

Add update notifications for daily/continuous builds#6656
Copilot wants to merge 7 commits intomainfrom
copilot/add-build-notifications

Conversation

Copy link
Contributor

Copilot AI commented Jan 30, 2026

Daily build users don't receive update notifications because there's no version.txt published to the daily channel.

Changes

Pipeline (eng/pipelines/templates/stages/publish.yml)

  • Upload version.txt to release/daily after continuous deployment builds

CLI (cli/azd/main.go)

  • Support defaults.updateChannel config setting for persistent channel selection
  • Support AZD_UPDATE_CHANNEL environment variable (daily | stable | latest) that overrides config
  • Use channel-specific cache files (update-check-{channel}.json) to prevent conflicts when switching channels
  • Construct channel-specific URLs: https://aka.ms/azure-dev/versions/cli/{channel}
  • Channel-aware update messages: Update notifications now show appropriate upgrade instructions based on the active channel
  • Daily channel restrictions: For daily channel users, only script-based installation methods (PowerShell/Bash) are shown, since package managers (winget, choco, brew, deb, rpm) only support stable releases
  • Daily upgrade commands: Script-based installations receive correct commands with --version daily flag

Documentation

  • Added defaults.updateChannel to config reference with AZD_UPDATE_CHANNEL environment variable override
  • Updated environment variables docs to explain precedence
  • Simplified installer README with recommended config approach

Usage

Recommended approach (persistent setting):

azd config set defaults.updateChannel daily

Environment variable (temporary override):

export AZD_UPDATE_CHANNEL=daily

Important: Daily builds should be installed using the install scripts with --version daily to ensure the latest daily build is used.

Update Message Behavior

Users on the daily channel will see appropriate upgrade instructions:

Script-based installations (supported):

  • Windows PS: Shows PowerShell command with -Version 'daily'
  • Linux/macOS: Shows bash command with --version daily

Other installation types:

  • Directs users to use install scripts for daily builds
  • Package managers (winget, choco, brew, deb, rpm) don't support daily channel

Users on stable/latest channel see standard upgrade instructions as before.

Note

The aka.ms redirect for /versions/cli/daily needs to be configured to point to azd/standalone/release/daily/version.txt in Azure Storage.

Original prompt

This section details on the original issue you should resolve

<issue_title>Update notifications for daily/continuous builds</issue_title>
<issue_description>For folks who are using daily/continuous builds. Will be nice to have notifications as we do our builds.</issue_description>

<agent_instructions>Discover how the official release build update artifacts and send notifications that updates are available and propose a change that will do a similar thing for daily and continuous builds. Think about the whole build and release process as you work through this.</agent_instructions>

Comments on the Issue (you are @copilot in this section)


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI and others added 4 commits January 30, 2026 09:15
Co-authored-by: Petermarcu <8228359+Petermarcu@users.noreply.github.com>
Co-authored-by: Petermarcu <8228359+Petermarcu@users.noreply.github.com>
…ents

Co-authored-by: Petermarcu <8228359+Petermarcu@users.noreply.github.com>
Co-authored-by: Petermarcu <8228359+Petermarcu@users.noreply.github.com>
Copilot AI changed the title [WIP] Update notifications for daily and continuous builds Add update notifications for daily/continuous builds Jan 30, 2026
Copilot AI requested a review from Petermarcu January 30, 2026 09:28
Copy link
Member

@danieljurek danieljurek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Good

  • EngSys changes look pretty correct. I've had problems with DevOps YAML in various AI scenarios in the past but that's improved remarkably.
  • It's good to build on the existing config system

The Bad

  • The user experience for this is going to point toward stable install channels in the case of a "daily" configuration. This will not result in the user getting the latest bits. "daily" can be most easily installed using the scripts. So, the output logic should be there
  • Use a user-level persistent config to determine the channel instead of requiring that an environment variable be set correctly

The Ugly

This is intended as a note to the product team, I don't think the fundamental user experience should change at this time* -- If a user opts into the "daily" channel there may be a brief time where the "latest" package supersedes what they have installed in terms of functionality (depending on the success of CI builds, etc.). I don't think that's a good enough reason to move the user off of the daily channel or, in the case of daily, check both daily and latest to see what's the freshest. In most cases, a CI build from a new commit shortly after release will keep the bits fresh enough.

This is also a note to product, not a change of design -- @rajeshkamal5050, does it make sense to use the channel of the current executable to determine the default channel to check in the case of no config value? (Right now it uses "latest" as the safe default, but if you download "daily" bits you're kind of opting into the daily channel)

github.com/openai/openai-go/v3 v3.2.0
github.com/sethvargo/go-retry v0.3.0
github.com/spf13/cobra v1.10.1
github.com/stretchr/testify v1.11.1
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this file changed in a PR that is intended to change behavior only in core azd and not in an extension?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reverted in 657baa3. These were unintended dependency updates that got pulled in during development.

Comment on lines 79 to 81
golang.org/x/net v0.48.0 // indirect
golang.org/x/sys v0.39.0 // indirect
golang.org/x/term v0.37.0 // indirect
golang.org/x/term v0.38.0 // indirect
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this file changed in a PR that is intended to change behavior only in core azd and not in an extension?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reverted in 657baa3. These were unintended dependency updates.

golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this file changed in a PR that is intended to change behavior only in core azd and not in an extension?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reverted in 657baa3. These were unintended dependency updates.

description: "Override the default configuration directory location."
type: envvar
example: "/path/to/config"
- key: (env) AZD_UPDATE_CHANNEL
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a good reason to use only an environment-based config and not a global config?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added global config support in 657baa3. Now supports defaults.updateChannel config setting with environment variable taking precedence. Users can use azd config set defaults.updateChannel daily for a persistent setting.

log.Print("fetching latest version information for update check")
req, err := http.NewRequest(http.MethodGet, "https://aka.ms/azure-dev/versions/cli/latest", nil)

versionURL := fmt.Sprintf("https://aka.ms/azure-dev/versions/cli/%s", updateChannel)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO for engineering: ensure appropriate aka.ms links and consumed assets are set up

[System.Environment]::SetEnvironmentVariable('AZD_UPDATE_CHANNEL', 'daily', 'User')
```

**Linux/MacOS (bash):**
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shell-specific configs are redundant, just show the export like is done with switching back to stable.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Simplified in 657baa3. Now shows the recommended azd config set approach and a simple export example for environment variable.

- Revert unintended extension go.mod/go.sum changes
- Add support for defaults.updateChannel config setting
- Environment variable AZD_UPDATE_CHANNEL overrides config
- Simplify installer README with recommended config approach
- Emphasize using install scripts for daily builds

Co-authored-by: danieljurek <2158838+danieljurek@users.noreply.github.com>
Copy link
Member

@danieljurek danieljurek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See cli/azd/main.go near line 111... Using the "daily" channel will not work on any other isntaller type except InstallerTypeSh and InstallerTypePs.

If the user is on the "daily" channel only use those commands described in those cases, and make sure that the command invoked uses the "daily" channel for upgrades. It might be worth writing a new set of conditions and extracting this logic into a separate module because it's increasing complexity.

Comment on lines 198 to 199
##### Install

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is redundant, remove.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed in 8ae518c. The duplicate "Install" header has been deleted.

- Pass channel info from fetchLatestVersion through versionCheckResult struct
- Show daily-specific upgrade instructions for daily channel users
- Only show script-based install commands for daily builds
- Package managers (winget, choco, brew, deb, rpm) don't support daily channel
- Remove redundant "Install" header in installer README

Co-authored-by: danieljurek <2158838+danieljurek@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Feb 2, 2026

See cli/azd/main.go near line 111... Using the "daily" channel will not work on any other isntaller type except InstallerTypeSh and InstallerTypePs.

If the user is on the "daily" channel only use th...

Fixed in 8ae518c. Now passes channel info through a versionCheckResult struct and shows daily-specific upgrade instructions. For daily channel users:

  • Script installations (PS/Sh): Shows correct command with --version daily
  • Other installations (winget, choco, brew, deb, rpm): Directs users to use install scripts since package managers only support stable releases

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.

Update notifications for daily/continuous builds

3 participants