home / skills / josiahsiegel / claude-plugin-marketplace / sprint-254-features

sprint-254-features skill

/plugins/ado-master/skills/sprint-254-features

npx playbooks add skill josiahsiegel/claude-plugin-marketplace --skill sprint-254-features

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
13.8 KB
---
name: sprint-254-features
description: Azure DevOps Sprint 254-262 new features and enhancements (2025)
---

## 🚨 CRITICAL GUIDELINES

### Windows File Path Requirements

**MANDATORY: Always Use Backslashes on Windows for File Paths**

When using Edit or Write tools on Windows, you MUST use backslashes (`\`) in file paths, NOT forward slashes (`/`).

**Examples:**
- ❌ WRONG: `D:/repos/project/file.tsx`
- ✅ CORRECT: `D:\repos\project\file.tsx`

This applies to:
- Edit tool file_path parameter
- Write tool file_path parameter
- All file operations on Windows systems


### Documentation Guidelines

**NEVER create new documentation files unless explicitly requested by the user.**

- **Priority**: Update existing README.md files rather than creating new documentation
- **Repository cleanliness**: Keep repository root clean - only README.md unless user requests otherwise
- **Style**: Documentation should be concise, direct, and professional - avoid AI-generated tone
- **User preference**: Only create additional .md files when user specifically asks for documentation


---

# Azure DevOps 2025 Latest Features (Sprints 254-262)

## New Expression Functions (Sprint 248)

### iif() - Ternary Conditional Operator

```yaml
# Syntax: iif(condition, valueIfTrue, valueIfFalse)

variables:
  environment: 'production'
  # Use iif for conditional values
  instanceCount: ${{ iif(eq(variables.environment, 'production'), 10, 2) }}
  deploymentSlot: ${{ iif(eq(variables.environment, 'production'), 'production', 'staging') }}

steps:
- script: echo "Deploying ${{ variables.instanceCount }} instances to ${{ variables.deploymentSlot }}"
```

### trim() - Remove Whitespace

```yaml
parameters:
- name: branchName
  type: string
  default: ' feature/my-branch '

variables:
  # Remove leading/trailing whitespace
  cleanBranch: ${{ trim(parameters.branchName) }}
  # Result: 'feature/my-branch' (no spaces)
```

## New Predefined Variables (Sprint 253)

### Build.StageRequestedBy

Who requested the stage execution:

```yaml
stages:
- stage: Deploy
  jobs:
  - job: DeployJob
    steps:
    - script: |
        echo "Stage requested by: $(Build.StageRequestedBy)"
        echo "Stage requester ID: $(Build.StageRequestedById)"
      displayName: 'Log stage requester'

    # Use for approval notifications
    - task: SendEmail@1
      inputs:
        to: '[email protected]'
        subject: 'Deployment requested by $(Build.StageRequestedBy)'
```

## Stage Dependencies Visualization (Sprint 254)

View stage dependencies when stage is expanded in pipeline UI:

```yaml
stages:
- stage: Build
  jobs:
  - job: BuildJob
    steps:
    - script: echo "Building..."

- stage: Test
  dependsOn: Build  # Shown visually when expanded
  jobs:
  - job: TestJob
    steps:
    - script: echo "Testing..."

- stage: Deploy_USEast
  dependsOn: Test
  jobs:
  - job: DeployJob
    steps:
    - script: echo "Deploying to US East..."

- stage: Deploy_EUWest
  dependsOn: Test  # Parallel with Deploy_USEast - visualized clearly
  jobs:
  - job: DeployJob
    steps:
    - script: echo "Deploying to EU West..."
```

**Benefits:**
- Visual dependency graph in UI
- Easier debugging of complex pipelines
- Clear multi-region deployment patterns
- Identify parallel vs sequential stages

## New OS Images

### Ubuntu-24.04 (General Availability)

```yaml
pool:
  vmImage: 'ubuntu-24.04'  # Latest LTS - Recommended
  # OR use ubuntu-latest (will map to 24.04 soon)
  # vmImage: 'ubuntu-latest'

steps:
- script: |
    lsb_release -a
    # Ubuntu 24.04 LTS (Noble Numbat)
```

**Key Information:**
- Ubuntu 24.04 is now generally available
- `ubuntu-latest` will soon map to `ubuntu-24.04` (currently `ubuntu-22.04`)
- Ubuntu 20.04 fully removed April 30, 2025

### Windows Server 2025 (Coming June 2025)

```yaml
pool:
  vmImage: 'windows-2025'  # GA: June 16, 2025

steps:
- pwsh: |
    Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion
```

**Key Information:**
- General availability: June 16, 2025
- `windows-latest` will map to `windows-2025` starting September 2, 2025
- Windows Server 2019 extended support until December 31, 2025

### macOS-15 Sequoia (Available)

```yaml
pool:
  vmImage: 'macOS-15'  # Sequoia

steps:
- script: |
    sw_vers
    # macOS 15.x (Sequoia)
```

**Key Information:**
- macOS 13 Ventura deprecation starts September 1, 2025
- macOS 13 retirement planned for December 4, 2025
- Apple Silicon (ARM64) support in preview

### ⚠️ Deprecated and Retired Images

**Fully Removed (2025):**
- **Ubuntu 20.04** - Removed April 30, 2025
- **.NET 6** - Removed from Windows and Ubuntu images August 1, 2025

**Extended Support:**
- **Windows Server 2019** - Extended until December 31, 2025
  - Deprecation starts: June 1, 2025
  - Brownout periods: June 3-24, 2025
  - Final removal: December 31, 2025

**Upcoming Deprecations:**
- **macOS 13 Ventura** - Deprecation: September 1, 2025, Retirement: December 4, 2025

**Migration Recommendations:**
```yaml
# Ubuntu Migration
# OLD (Removed)
pool:
  vmImage: 'ubuntu-20.04'

# NEW (Recommended)
pool:
  vmImage: 'ubuntu-24.04'  # Best: explicit version
  # OR
  vmImage: 'ubuntu-latest'  # Will map to 24.04 soon

# Windows Migration
# OLD (Being deprecated)
pool:
  vmImage: 'windows-2019'

# NEW (Recommended)
pool:
  vmImage: 'windows-2022'  # Current stable
  # OR wait for
  vmImage: 'windows-2025'  # GA June 2025
```

## GitHub Integration Improvements

### Auto-linked Pull Requests

GitHub branches linked to work items automatically link PRs:

```yaml
# When PR is created for branch linked to work item,
# PR automatically appears in work item's Development section

trigger:
  branches:
    include:
    - feature/*
    - users/*

# Work item auto-linking based on branch name pattern
# AB#12345 in commits auto-links to work item 12345
```

### "Integrated in build" Links

GitHub repos show which build integrated the PR:

```yaml
pr:
  branches:
    include:
    - main
    - develop

# After PR merged, work item shows:
# "Integrated in build: Pipeline Name #123"
# Direct link to build that deployed the change
```

## Stage-Level Variables

```yaml
stages:
- stage: Build
  variables:
    buildConfiguration: 'Release'
    platform: 'x64'
  jobs:
  - job: BuildJob
    steps:
    - script: echo "Building $(buildConfiguration) $(platform)"

- stage: Deploy
  variables:
    environment: 'production'
    region: 'eastus'
  jobs:
  - job: DeployJob
    steps:
    - script: |
        echo "Stage: $(System.StageName)"
        echo "Requested by: $(Build.StageRequestedBy)"
        echo "Deploying to $(environment) in $(region)"
```

## Practical Examples

### Multi-Region Deployment with New Features

```yaml
parameters:
- name: deployToProd
  type: boolean
  default: false

variables:
  # Use iif for conditional values
  targetEnvironment: ${{ iif(parameters.deployToProd, 'production', 'staging') }}

stages:
- stage: Build
  jobs:
  - job: BuildApp
    pool:
      vmImage: 'ubuntu-24.04'  # New image
    steps:
    - script: npm run build

- stage: Test
  dependsOn: Build
  jobs:
  - job: RunTests
    pool:
      vmImage: 'ubuntu-24.04'
    steps:
    - script: npm test

- stage: Deploy_USEast
  dependsOn: Test
  condition: succeeded()
  variables:
    region: 'eastus'
  jobs:
  - deployment: DeployToUSEast
    environment: ${{ variables.targetEnvironment }}
    pool:
      vmImage: 'ubuntu-24.04'
    strategy:
      runOnce:
        deploy:
          steps:
          - script: |
              echo "Deploying to $(region)"
              echo "Requested by: $(Build.StageRequestedBy)"

- stage: Deploy_EUWest
  dependsOn: Test  # Parallel with Deploy_USEast
  condition: succeeded()
  variables:
    region: 'westeurope'
  jobs:
  - deployment: DeployToEUWest
    environment: ${{ variables.targetEnvironment }}
    pool:
      vmImage: 'ubuntu-24.04'
    strategy:
      runOnce:
        deploy:
          steps:
          - script: |
              echo "Deploying to $(region)"
              echo "Requested by: $(Build.StageRequestedBy)"

# Stage dependencies visualized clearly in UI (Sprint 254)
```

## Continuous Access Evaluation (Sprint 260 - August 2025)

### Enhanced Security with CAE

Azure DevOps now supports **Continuous Access Evaluation (CAE)**, enabling near real-time enforcement of Conditional Access policies through Microsoft Entra ID.

**Key Benefits:**
- Instant access revocation on critical events
- No waiting for token expiration
- Enhanced security posture

**Triggers for Access Revocation:**
- User account disabled
- Password reset
- Location or IP address changes
- Risk detection events
- Policy violations

**Example Scenario:**
```yaml
# Your pipeline with CAE enabled automatically
stages:
  - stage: Production
    jobs:
      - deployment: Deploy
        environment: 'production'
        pool:
          vmImage: 'ubuntu-24.04'
        strategy:
          runOnce:
            deploy:
              steps:
                - script: echo "Deploying..."
                  # If user credentials are revoked mid-deployment,
                  # CAE will instantly terminate access
```

**Implementation:**
- General availability: August 2025
- Phased rollout to all customers
- No configuration required (automatic for all Azure DevOps orgs)
- Works with Microsoft Entra ID Conditional Access policies

**Security Improvements:**
- Immediate response to security events
- Reduces attack window from hours/days to seconds
- Complements existing security features (Key Vault, branch policies, etc.)

## OAuth Apps Deprecation (April 2025)

**Important Change:**
- Azure DevOps no longer supports **new registrations** of Azure DevOps OAuth apps (effective April 2025)
- First step towards retiring the Azure DevOps OAuth platform
- Existing OAuth apps continue to work
- Plan migration to Microsoft Entra ID authentication

**Migration Recommendations:**
```yaml
# Use service connections with Microsoft Entra ID instead
- task: AzureCLI@2
  inputs:
    azureSubscription: 'service-connection'  # Uses Managed Identity or Service Principal
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    addSpnToEnvironment: true
    inlineScript: |
      az account show
```

## SNI Requirement (April 2025)

**Network Requirement:**
- **Server Name Indication (SNI)** required on all incoming HTTPS connections
- Effective: April 23, 2025
- Affects all Azure DevOps Services connections

**What to Check:**
- Ensure clients support SNI (most modern clients do)
- Update legacy tools/scripts if needed
- Test connectivity before April 23, 2025

## OAuth Apps Deprecation (Sprint 261 - September 2025)

**Critical Security Change:**

Azure DevOps is enforcing one-time visibility for OAuth client secrets:
- Newly generated client secrets displayed only once at creation
- Get Registration Secret API will be retired
- Change effective: September 2, 2025
- No new OAuth app registrations allowed

**Migration Path:**
```yaml
# Replace OAuth apps with Microsoft Entra ID authentication
# Use service connections with Managed Identity or Service Principal
- task: AzureCLI@2
  inputs:
    azureSubscription: 'entra-id-service-connection'
    scriptType: 'bash'
    addSpnToEnvironment: true
    inlineScript: |
      az account show
      # Authenticated via Entra ID
```

**Action Required:**
- Audit existing OAuth apps
- Plan migration to Entra ID authentication
- Update CI/CD pipelines to use service connections
- Document secret rotation procedures

## Agent Software Version 4 (October 2024 - Current)

**Major Upgrade:**

The Azure Pipelines agent has been upgraded from v3.x to v4.x, powered by .NET 8:

**Key Improvements:**
- Built on .NET 8 for better performance and security
- Extended platform support including ARM64
- Improved reliability and diagnostics
- Better resource management

**Platform Support:**
- **Linux:** Debian 11 & 12, Ubuntu 24.04, 22.04, 20.04 (ARM64 supported)
- **macOS:** Intel and Apple Silicon (ARM64 supported)
- **Windows:** Windows Server 2019, 2022, 2025

**ARM64 Support:**
```yaml
# Self-hosted ARM64 agent
pool:
  name: 'arm64-pool'
  demands:
    - agent.os -equals Linux
    - Agent.OSArchitecture -equals ARM64

steps:
  - script: uname -m
    displayName: 'Verify ARM64 architecture'
```

**Note:** ARM64 support is available for self-hosted agents. Microsoft-hosted ARM64 macOS agents are in preview.

## Sprint 262 - GitHub Copilot Integration (2025)

**AI-Powered Work Item Assistance (Private Preview):**

Connect Azure Boards work items directly with GitHub Copilot:

**Capabilities:**
- Send work items to Copilot coding agent
- AI-assisted bug fixes
- Automated feature implementation
- Test coverage improvements
- Documentation updates
- Technical debt reduction

**Usage Pattern:**
1. Create work item in Azure Boards
2. Add detailed requirements in description
3. Send to GitHub Copilot
4. Copilot generates code changes
5. Review and merge via standard PR process

**Integration with Pipelines:**
```yaml
# Work items auto-link with PRs
trigger:
  branches:
    include:
    - feature/*

# Mention work item in commit
# Example: "Fix login bug AB#12345"
# Automatically links PR to work item and tracks in build
```

## Resources

- [Azure DevOps Sprint 262 Update](https://learn.microsoft.com/azure/devops/release-notes/2025/sprint-262-update)
- [Azure DevOps Sprint 261 Update](https://learn.microsoft.com/azure/devops/release-notes/2025/general/sprint-261-update)
- [Azure DevOps Sprint 260 Update](https://learn.microsoft.com/azure/devops/release-notes/2025/general/sprint-260-update)
- [Azure DevOps Sprint 254 Update](https://devblogs.microsoft.com/devops/)
- [Agent Software Version 4](https://learn.microsoft.com/azure/devops/pipelines/agents/v4-agent)
- [Expression Functions Documentation](https://learn.microsoft.com/azure/devops/pipelines/process/expressions)
- [Hosted Agent Images](https://learn.microsoft.com/azure/devops/pipelines/agents/hosted)
- [Continuous Access Evaluation Documentation](https://learn.microsoft.com/azure/devops/release-notes/)