Skip to content

Commit

Permalink
[conductor] Tag engine versions (#120419)
Browse files Browse the repository at this point in the history
* [conductor] Tag engine versions

* Move tag to repository
  • Loading branch information
Casey Hillers authored Feb 10, 2023
1 parent 25c2c22 commit b2e37c6
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 27 deletions.
25 changes: 19 additions & 6 deletions dev/conductor/core/lib/src/next.dart
Original file line number Diff line number Diff line change
Expand Up @@ -264,21 +264,33 @@ class NextContext extends Context {
case pb.ReleasePhase.PUBLISH_VERSION:
stdio.printStatus('Please ensure that you have merged your framework PR and that');
stdio.printStatus('post-submit CI has finished successfully.\n');
final Remote upstream = Remote(
final Remote frameworkUpstream = Remote(
name: RemoteName.upstream,
url: state.framework.upstream.url,
);
final FrameworkRepository framework = FrameworkRepository(
checkouts,
// We explicitly want to check out the merged version from upstream
initialRef: '${upstream.name}/${state.framework.candidateBranch}',
upstreamRemote: upstream,
initialRef: '${frameworkUpstream.name}/${state.framework.candidateBranch}',
upstreamRemote: frameworkUpstream,
previousCheckoutLocation: state.framework.checkoutPath,
);
final String headRevision = await framework.reverseParse('HEAD');
final String frameworkHead = await framework.reverseParse('HEAD');
final Remote engineUpstream = Remote(
name: RemoteName.upstream,
url: state.engine.upstream.url,
);
final EngineRepository engine = EngineRepository(
checkouts,
// We explicitly want to check out the merged version from upstream
initialRef: '${engineUpstream.name}/${state.engine.candidateBranch}',
upstreamRemote: engineUpstream,
previousCheckoutLocation: state.engine.checkoutPath,
);
final String engineHead = await engine.reverseParse('HEAD');
if (autoAccept == false) {
final bool response = await prompt(
'Are you ready to tag commit $headRevision as ${state.releaseVersion}\n'
'Are you ready to tag commit $frameworkHead as ${state.releaseVersion}\n'
'and push to remote ${state.framework.upstream.url}?',
);
if (!response) {
Expand All @@ -287,7 +299,8 @@ class NextContext extends Context {
return;
}
}
await framework.tag(headRevision, state.releaseVersion, upstream.name);
await framework.tag(frameworkHead, state.releaseVersion, frameworkUpstream.name);
await engine.tag(engineHead, state.releaseVersion, engineUpstream.name);
break;
case pb.ReleasePhase.PUBLISH_CHANNEL:
final Remote upstream = Remote(
Expand Down
42 changes: 21 additions & 21 deletions dev/conductor/core/lib/src/repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,27 @@ abstract class Repository {
);
}

/// Tag [commit] and push the tag to the remote.
Future<void> tag(String commit, String tagName, String remote) async {
assert(commit.isNotEmpty);
assert(tagName.isNotEmpty);
assert(remote.isNotEmpty);
stdio.printStatus('About to tag commit $commit as $tagName...');
await git.run(
<String>['tag', tagName, commit],
'tag the commit with the version label',
workingDirectory: (await checkoutDirectory).path,
);
stdio.printStatus('Tagging successful.');
stdio.printStatus('About to push $tagName to remote $remote...');
await git.run(
<String>['push', remote, tagName],
'publish the tag to the repo',
workingDirectory: (await checkoutDirectory).path,
);
stdio.printStatus('Tag push successful.');
}

/// List commits in reverse chronological order.
Future<List<String>> revList(List<String> args) async {
return (await git.getOutput(<String>['rev-list', ...args],
Expand Down Expand Up @@ -592,27 +613,6 @@ class FrameworkRepository extends Repository {
);
}

/// Tag [commit] and push the tag to the remote.
Future<void> tag(String commit, String tagName, String remote) async {
assert(commit.isNotEmpty);
assert(tagName.isNotEmpty);
assert(remote.isNotEmpty);
stdio.printStatus('About to tag commit $commit as $tagName...');
await git.run(
<String>['tag', tagName, commit],
'tag the commit with the version label',
workingDirectory: (await checkoutDirectory).path,
);
stdio.printStatus('Tagging successful.');
stdio.printStatus('About to push $tagName to remote $remote...');
await git.run(
<String>['push', remote, tagName],
'publish the tag to the repo',
workingDirectory: (await checkoutDirectory).path,
);
stdio.printStatus('Tag push successful.');
}

@override
Future<FrameworkRepository> cloneRepository(String? cloneName) async {
assert(localUpstream);
Expand Down
36 changes: 36 additions & 0 deletions dev/conductor/core/test/next_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -758,6 +758,10 @@ void main() {
candidateBranch: candidateBranch,
upstream: pb.Remote(url: FrameworkRepository.defaultUpstream),
),
engine: pb.Repository(
candidateBranch: candidateBranch,
upstream: pb.Remote(url: EngineRepository.defaultUpstream),
),
releaseVersion: releaseVersion,
);
platform = FakePlatform(
Expand All @@ -773,6 +777,18 @@ void main() {
stdio.stdin.add('n');
final FakeProcessManager processManager = FakeProcessManager.list(
<FakeCommand>[
// Framework checkout
const FakeCommand(
command: <String>['git', 'fetch', 'upstream'],
),
const FakeCommand(
command: <String>['git', 'checkout', '$remoteName/$candidateBranch'],
),
const FakeCommand(
command: <String>['git', 'rev-parse', 'HEAD'],
stdout: revision1,
),
// Engine checkout
const FakeCommand(
command: <String>['git', 'fetch', 'upstream'],
),
Expand Down Expand Up @@ -818,6 +834,7 @@ void main() {
test('updates state.currentPhase if user responds yes', () async {
stdio.stdin.add('y');
final FakeProcessManager processManager = FakeProcessManager.list(<FakeCommand>[
// Framework checkout
const FakeCommand(
command: <String>['git', 'fetch', 'upstream'],
),
Expand All @@ -828,12 +845,31 @@ void main() {
command: <String>['git', 'rev-parse', 'HEAD'],
stdout: revision1,
),
// Engine checkout
const FakeCommand(
command: <String>['git', 'fetch', 'upstream'],
),
const FakeCommand(
command: <String>['git', 'checkout', '$remoteName/$candidateBranch'],
),
const FakeCommand(
command: <String>['git', 'rev-parse', 'HEAD'],
stdout: revision2,
),
// Framework tag
const FakeCommand(
command: <String>['git', 'tag', releaseVersion, revision1],
),
const FakeCommand(
command: <String>['git', 'push', remoteName, releaseVersion],
),
// Engine tag
const FakeCommand(
command: <String>['git', 'tag', releaseVersion, revision2],
),
const FakeCommand(
command: <String>['git', 'push', remoteName, releaseVersion],
),
]);
final FakePlatform platform = FakePlatform(
environment: <String, String>{
Expand Down

0 comments on commit b2e37c6

Please sign in to comment.