Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bump globals.yml .NET SDK version from 3.1.405 to 6.x + assorted changes #4916

Merged
merged 10 commits into from
Dec 15, 2022

Conversation

konrad-jamrozik
Copy link
Contributor

@konrad-jamrozik konrad-jamrozik commented Dec 8, 2022

Context

Updating .NET SDK version from 3.1.405 to 6.x for our pipelines because:

I chose 6.x because this is the version installed on the image we use, as explained in #4915 (comment).

Note: Alternatively, I could have used 6.0.403, because it is a string that is present in releases / sdk / version in the releases.json, as explained in UseDotNet@2 task doc. For more, see #4915 (comment).

Changes made

  • Primarily, the .NET SDK version in globals.yml, which is picked by our archetype files;
  • Also changed archetype-sdk-tool-azure-function.yml to use net6.x and does few other assorted changes.
    • Updated used image from Ubuntu 18.04, 1ES-hosted Ubuntu 20.04.
  • Got rid of temporary project-specific .NET overrides.
  • In GitHubIssues, updated Microsoft.NET.Sdk.Functions from 3.0.9 to 4.1.3, as the old version depended on obsolete .NET SDK version.
  • In archetype-sdk-tool-dotnet.yml, ensured the directory from which packages are to be published always exists, even if it wasn't created by previous steps because they didn't create any packages. This is the case e.g. for identity-resolution - ci which caused it to fail after the update of .NET version. This appears to be a behavior change introduced in .NET 6 or earlier. Unfortunately, there is no "directory exists" expression: the doc doesn't mention it, and relevant issues or feature requests only propose workarounds: azure-devops-docs #1877 and developer community 366095.

Note I did not update CheckEnforcer and WebhookRouter as they are scheduled for deletion per #4937 (review). PRs doing that:

@konrad-jamrozik konrad-jamrozik requested a review from a team as a code owner December 8, 2022 07:36
@konrad-jamrozik konrad-jamrozik changed the title Bump .NET SDK version from 3.1.405 to 6.0.403 Bump globals.yml .NET SDK version from 3.1.405 to 6.0.403 Dec 8, 2022
@konrad-jamrozik konrad-jamrozik self-assigned this Dec 8, 2022
@konrad-jamrozik konrad-jamrozik added the Central-EngSys This issue is owned by the Engineering System team. label Dec 8, 2022
@@ -1,6 +1,6 @@
variables:
OfficialBuildId: $(Build.BuildNumber)
skipComponentGovernanceDetection: true
DotNetCoreVersion: '3.1.405'
DotNetCoreVersion: '6.0.403'
Copy link
Member

Choose a reason for hiding this comment

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

We are also going to need to update our target frameworks in the various projects.

Copy link
Member

Choose a reason for hiding this comment

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

We have also talked about moving this version into https://github.com/Azure/azure-sdk-tools/blob/main/global.json similar to what azure-sdk-for-net repo does.

Copy link
Contributor Author

@konrad-jamrozik konrad-jamrozik Dec 10, 2022

Choose a reason for hiding this comment

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

@weshaggard

We are also going to need to update our target frameworks in the various projects.

I found more issues related to this caused by SDKs going out of support. Please see #4934 and #4935.

However, once these problems are solved, I don't think that TargetFramework has to exactly match the SDK used, as long as the targeted framework is not newer than the SDK and is not obsolete. Which admittedly is a bit moot point now, because everything before net6.0 is obsolete (-:

We have also talked about moving this version into https://github.com/Azure/azure-sdk-tools/blob/main/global.json similar to what azure-sdk-for-net repo does.

How about I do the migration to global.json in a separate, follow-up PR?

Also, I think this PR is no longer required to unblock PR #4915 per my comment there, so I suggest we go ahead with merging #4915 to mitigate #4888, and then work on more broad fix proposed by this PR.

@konrad-jamrozik
Copy link
Contributor Author

/check-enforcer override

@konrad-jamrozik konrad-jamrozik force-pushed the users/kojamroz/iss_4880_archetype_net60 branch from f013412 to 1dac5d0 Compare December 10, 2022 04:38
ghost pushed a commit that referenced this pull request Dec 12, 2022
… to use Ubuntu 20.04 (#4930)

This PR, in tandem with PRs #4915 and #4916, addresses #4888. This PR subsumes the abandoned PR of #4911.

Specifically, this PR ensures that `prepare-pipelines.yml` is configured to use specific `pool`, set to use Ubuntu 20.04:

```
pool:
  name: azsdk-pool-mms-ubuntu-2004-general
  vmImage: MMSUbuntu20.04
```

Without the [pool](https://learn.microsoft.com/en-us/azure/devops/pipelines/yaml-schema/pool?view=azure-pipelines) definition pointing to Ubuntu 20.04, the steps within the file used an implicit default, which resolves to `ubuntu-latest`. This caused breakage as explained in #4888. Setting the pool to Ubuntu 20.04 will allow us to:

- Immediately unblock the language repos `prepare-pipelines.yml` pipelines [1], as Ubuntu 20.04 has the .NET Core version used by it [2];
- Allow us to migrate our tooling to .NET 6 as both Ubuntu 20.04 and `ubuntu-latest`, which is Ubuntu 22.04 [3], have .NET on them [4]. This step is accomplished by PRs #4916 and #4915;
- Allow us to migrate to Ubuntu 22.04 once we migrate to .NET 6.

## Technical considerations of the changes

- The current `prepare-pipelines.yml` has only [steps](https://learn.microsoft.com/en-us/azure/devops/pipelines/yaml-schema/steps?view=azure-pipelines) definition, which does not support `pool` definition. One needs to wrap the steps in [job](https://learn.microsoft.com/en-us/azure/devops/pipelines/yaml-schema/jobs-job?view=azure-pipelines) definition to support `pool` [5].
- Because the `.yml` file is located in `eng/common/pipelines/templates/steps/` directory (note the `steps`), we cannot wrap the steps in job and leave it there; the introduction of `job` necessitates introducing the changes in `eng/common/pipelines/templates/jobs/` directory instead (note the `jobs`), which is done in this PR.
- Because this PR introduces a new file, once this PR is merged, the language-specific `prepare-pipelines.yml` language pipelines need to be rewired to point to the newly introduced file. This approach was proposed in #4911 (comment). 
  - Language repos PRs doing the rewiring: 
    Azure/azure-sdk-for-net#32999 
    ... more to come!

## Testing done

I have confirmed the proposed modification to the `.yml` file will work [by modifying the existing `prepare-pipelines.yml` directly](Azure/azure-sdk-for-java@f8cef4c) to have exactly the same contents as the `/jobs/prepare-pipelines.yml` introduced in this PR, and observing the [relevant build succeeds on azure-sdk-for-java](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=2044120&view=logs&j=7f42699e-eeb0-56c8-40c2-c88ae4093e4f&t=a02502cb-238e-5603-14ee-8bb7bd07f0c6):

![image](https://user-images.githubusercontent.com/4429827/206805076-b01baf33-871a-4ff2-816e-fa8458fa0063.png)

while it failed before this change:

![image](https://user-images.githubusercontent.com/4429827/206805129-b3bd8ebb-b97b-444b-8785-e6edf68c9720.png)

# Footnotes

[1] for example, [internal / java / prepare-pipelines](https://dev.azure.com/azure-sdk/internal/_build?definitionId=2158&_a=summary) pipeline, or [internal / net / prepare-pipelines](https://dev.azure.com/azure-sdk/internal/_build?definitionId=2179) pipeline.

[2] as evidenced by the [Ubuntu 20.04 image software page](https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2004-Readme.md#net-core-sdk), it has .NET Core 3.1. The pool definition value points to a 1ES hosted image which has the software listed on that page, as explained by this comment: #4888 (comment).

[3] See this comment: #4888 (comment).

[4] as evidenced by the [Ubuntu 22.04 image software page](https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2204-Readme.md#net-core-sdk).

[5] Observe that on [pool definition](https://learn.microsoft.com/en-us/azure/devops/pipelines/yaml-schema/pool?view=azure-pipelines) YAML reference page, we can read:

> Properties that use this definition: pipeline.pool, stages.stage.pool, jobs.job.pool, jobs.deployment.pool.

i.e. `steps.pool` is not listed.
@konrad-jamrozik konrad-jamrozik force-pushed the users/kojamroz/iss_4880_archetype_net60 branch 2 times, most recently from aa517b8 to 8128edd Compare December 14, 2022 20:43
@konrad-jamrozik konrad-jamrozik changed the title Bump globals.yml .NET SDK version from 3.1.405 to 6.0.403 Bump globals.yml .NET SDK version from 3.1.405 to 6.x + assorted changes Dec 14, 2022
@konrad-jamrozik konrad-jamrozik force-pushed the users/kojamroz/iss_4880_archetype_net60 branch from 3097908 to 9ca067f Compare December 14, 2022 21:14
@konrad-jamrozik
Copy link
Contributor Author

@weshaggard @benbp this PR is ready for review for approval. Thx! :)

Copy link
Member

@benbp benbp left a comment

Choose a reason for hiding this comment

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

Thanks @konrad-jamrozik !

Copy link
Member

@weshaggard weshaggard left a comment

Choose a reason for hiding this comment

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

The changes look reasonable to me once CI is passing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Central-EngSys This issue is owned by the Engineering System team.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants