Skip to content
  •  
  •  
  •  
23 changes: 5 additions & 18 deletions .ado/azure-pipelines.publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -85,24 +85,11 @@ extends:
displayName: 'yarn buildci [test]'

- script: |
echo ##vso[task.setvariable variable=SkipNpmPublishArgs]--no-publish
displayName: Enable No-Publish (npm)
condition: ${{ parameters.skipNpmPublish }}

- script: |
echo ##vso[task.setvariable variable=SkipGitPushPublishArgs]--no-push
displayName: Enable No-Publish (git)
condition: ${{ parameters.skipGitPush }}

- script: |
yarn publish:beachball $(SkipNpmPublishArgs) $(SkipGitPushPublishArgs) --access public --token $(npmAuth) -b origin/main -y
displayName: 'Publish NPM Packages (for main branch)'
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))

- script: |
yarn publish:beachball $(SkipNpmPublishArgs) $(SkipGitPushPublishArgs) --access public --token $(npmAuth) -y -t v${{ replace(variables['Build.SourceBranch'],'refs/heads/releases/','') }} -b origin/${{ replace(variables['Build.SourceBranch'],'refs/heads/','') }} --prerelease-prefix ${{ replace(variables['Build.SourceBranch'],'refs/heads/releases/','') }}
displayName: 'Publish NPM Packages (for other release branches)'
condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/main'))
yarn changeset:publish
displayName: 'Publish NPM Packages with Changesets'
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'), not(${{ parameters.skipNpmPublish }}))
env:
NPM_TOKEN: $(npmAuth)

- template: .ado/templates/win32-nuget-publish.yml@self
parameters:
Expand Down
8 changes: 0 additions & 8 deletions .ado/azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,6 @@ jobs:

- template: templates/setup-repo.yml

- script: |
yarn checkchange
displayName: 'check change'

- script: |
yarn prettier
displayName: 'check prettier'
Expand All @@ -36,10 +32,6 @@ jobs:
yarn buildci
displayName: 'yarn buildci [test]'

- script: |
yarn check-for-changed-files
displayName: 'verify API and Ensure Changed Files'

- job: AndroidPR
displayName: Android PR
pool:
Expand Down
102 changes: 102 additions & 0 deletions .changeset/beachball-migration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
---
"@fluentui-react-native/adapters": patch
"@fluentui-react-native/android-theme": patch
"@fluentui-react-native/apple-theme": patch
"@fluentui-react-native/avatar": patch
"@fluentui-react-native/badge": patch
"@fluentui-react-native/button": patch
"@fluentui-react-native/callout": patch
"@fluentui-react-native/checkbox": patch
"@fluentui-react-native/chip": patch
"@fluentui-react-native/codemods": patch
"@fluentui-react-native/composition": patch
"@fluentui-react-native/contextual-menu": patch
"@fluentui-react-native/default-theme": patch
"@fluentui-react-native/divider": patch
"@fluentui-react-native/drawer": patch
"@fluentui-react-native/dropdown": patch
"@fluentui-react-native/experimental-activity-indicator": patch
"@fluentui-react-native/experimental-appearance-additions": patch
"@fluentui-react-native/experimental-avatar": patch
"@fluentui-react-native/experimental-checkbox": patch
"@fluentui-react-native/experimental-expander": patch
"@fluentui-react-native/experimental-menu-button": patch
"@fluentui-react-native/experimental-native-date-picker": patch
"@fluentui-react-native/experimental-native-font-metrics": patch
"@fluentui-react-native/experimental-shadow": patch
"@fluentui-react-native/experimental-shimmer": patch
"@fluentui-react-native/focus-trap-zone": patch
"@fluentui-react-native/focus-zone": patch
"@fluentui-react-native/framework": patch
"@fluentui-react-native/framework-base": patch
"@fluentui-react-native/icon": patch
"@fluentui-react-native/immutable-merge": patch
"@fluentui-react-native/input": patch
"@fluentui-react-native/interactive-hooks": patch
"@fluentui-react-native/link": patch
"@fluentui-react-native/memo-cache": patch
"@fluentui-react-native/menu": patch
"@fluentui-react-native/menu-button": patch
"@fluentui-react-native/merge-props": patch
"@fluentui-react-native/notification": patch
"@fluentui-react-native/overflow": patch
"@fluentui-react-native/persona": patch
"@fluentui-react-native/persona-coin": patch
"@fluentui-react-native/popover": patch
"@fluentui-react-native/pressable": patch
"@fluentui-react-native/radio-group": patch
"@fluentui-react-native/separator": patch
"@fluentui-react-native/spinner": patch
"@fluentui-react-native/stack": patch
"@fluentui-react-native/styling-utils": patch
"@fluentui-react-native/switch": patch
"@fluentui-react-native/tablist": patch
"@fluentui-react-native/text": patch
"@fluentui-react-native/theme": patch
"@fluentui-react-native/theme-tokens": patch
"@fluentui-react-native/theme-types": patch
"@fluentui-react-native/themed-stylesheet": patch
"@fluentui-react-native/theming-utils": patch
"@fluentui-react-native/tokens": patch
"@fluentui-react-native/tooltip": patch
"@fluentui-react-native/use-slot": patch
"@fluentui-react-native/use-slots": patch
"@fluentui-react-native/use-styling": patch
"@fluentui-react-native/use-tokens": patch
"@fluentui-react-native/vibrancy-view": patch
"@fluentui-react-native/win32-theme": patch
"@fluentui/react-native": patch
"@uifabricshared/foundation-composable": patch
"@uifabricshared/foundation-compose": patch
"@uifabricshared/foundation-settings": patch
"@uifabricshared/foundation-tokens": patch
"@uifabricshared/theme-registry": patch
"@uifabricshared/themed-settings": patch
"@uifabricshared/theming-ramp": patch
"@uifabricshared/theming-react-native": patch
---

# Migration from Beachball to Changesets

This changeset represents the migration from Beachball to Changesets for version management and consolidates all changes from 440+ beachball change files that were in the `change/` directory.

All 75 affected packages receive a patch version bump to acknowledge the accumulated changes from the beachball era.

## What Changed

Going forward, all version management uses Changesets via `yarn changeset`. The following beachball infrastructure has been removed:

- ❌ 440+ beachball change files from `change/` directory
- ❌ `beachball` package dependency
- ❌ Beachball scripts from `package.json`
- ❌ `beachball.config.js` configuration file
- ❌ Beachball publish steps from Azure Pipelines

## New Workflow

✅ **Create changes**: Run `yarn changeset` to document changes
✅ **Version bump PRs**: Automatically created by GitHub Actions
✅ **Publishing**: Handled by Azure Pipelines using `changeset publish`
✅ **Validation**: CI validates changesets and blocks major version bumps

For details, see `CHANGESETS_SETUP.md` and `CONTRIBUTING.md`.
17 changes: 17 additions & 0 deletions .changeset/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": ["@changesets/cli/commit", { "skipCI": false }],
"linked": [],
"access": "public",
"baseBranch": "origin/main",
"ignore": [
"@fluentui-react-native/dependency-profiles",
"@fluentui-react-native/e2e-testing",
"@fluentui-react-native/tester",
"@fluentui-react-native/tester-core",
"@fluentui-react-native/tester-win32",
"@fluentui-react-native/tester-win32-81",
"@fluentui-react-native/test-*"
]
}
76 changes: 76 additions & 0 deletions .github/scripts/update-dependency-profiles-postbump.mts
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#!/usr/bin/env node
/**
* Post-version hook for dependency-profiles package
*
* This script runs after changesets version bump to update dependency-profiles
* with the latest package versions and commit the changes.
*
* Usage: node scripts/update-dependency-profiles-postbump.mts
*/

import { execSync } from 'child_process';
import { existsSync } from 'fs';
import { resolve } from 'path';

const DEPENDENCY_PROFILES_DIR = 'packages/dependency-profiles';

function execCommand(command: string, cwd?: string): void {
console.log(`> ${command}`);
execSync(command, {
stdio: 'inherit',
cwd: cwd ? resolve(cwd) : undefined
});
}

function hasGitChanges(): boolean {
try {
const output = execSync('git status --porcelain', { encoding: 'utf8' });
return output.trim().length > 0;
} catch (error) {
console.error('Failed to check git status:', error);
return false;
}
}

function main(): void {
console.log('🔍 Checking for dependency-profiles package...');

if (!existsSync(DEPENDENCY_PROFILES_DIR)) {
console.log('⚠️ dependency-profiles directory not found, skipping');
return;
}

console.log('📦 Updating dependency-profiles');

// Run update-profile script
execCommand('yarn update-profile', DEPENDENCY_PROFILES_DIR);

// Update lockfile at root
console.log('🔄 Updating yarn.lock');
execCommand('yarn install --mode update-lockfile');

// Check if there are changes to commit
if (!hasGitChanges()) {
console.log('✅ No changes to commit');
return;
}

console.log('💾 Committing dependency-profiles updates');

// Configure git
execCommand('git config user.name "github-actions[bot]"');
execCommand('git config user.email "github-actions[bot]@users.noreply.github.com"');

// Stage all changes
execCommand('git add .');

// Commit
execCommand('git commit -m "chore: update dependency-profiles and lockfile"');

// Push
execCommand('git push');

console.log('✅ Committed dependency-profiles updates');
}

main();
Loading
Loading