Skip to content

Commit

Permalink
Use dotnet-install.sh in .NET feature (#628)
Browse files Browse the repository at this point in the history
* Use dotnet-install.sh in .NET feature

* Use latest.version files

* Cleanup runtime args

* Use latest.version files in tests as well

* Improve tests, remove code duplication

* Add stderr helper

* Validate version inputs

* Use suggested description

Co-authored-by: Samruddhi Khandale <[email protected]>

* Shorter version description

Co-authored-by: Samruddhi Khandale <[email protected]>

* Shorter version description

Co-authored-by: Samruddhi Khandale <[email protected]>

* Clean up apt lists

* Verify 7.0 is latest

* Fix PATH, add test for .NET global tools

* Include a copy of dotnet-install.sh in the Feature

* Configure useful env variables

* Use stringly typed booleans

* Keep imperative writing style in option hints

* Update maintainers

Co-authored-by: Samruddhi Khandale <[email protected]>

* Move dotnet-install.sh into a vendor directory

* Refactor variables

* Amend

* Amend 2

* Use default options from devcontainer-feature.json

* Add back variables

* Fix shellchek warning in fetch_latest_sdk_version

* Inline install_version function

* Fix ShellCheck warnings

* Improve CSV parsing

* Default to latest when configuring an empty version

* Add support for runtime-only configurations

* Move 'none' check higher up

* Deduplicate helper functions, sort into files

* Address the user more directly in NOTES

* Remove unnecessary defaults

* Replace feature -> Feature

Co-authored-by: Samruddhi Khandale <[email protected]>

* Add update-dotnet-install-script workflow

* Apply suggestions from code review

Co-authored-by: Samruddhi Khandale <[email protected]>

* Don't skip ci for automated script update

---------

Co-authored-by: Samruddhi Khandale <[email protected]>
  • Loading branch information
sliekens and samruddhikhandale authored Sep 11, 2023
1 parent 038bed3 commit 96c1eea
Show file tree
Hide file tree
Showing 44 changed files with 2,771 additions and 670 deletions.
48 changes: 48 additions & 0 deletions .github/workflows/update-dotnet-install-script.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: "Updates vendor 'dotnet-install' script"
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * 0' # Runs every Sunday at midnight UTC (adjust as needed)

jobs:
fetch-latest-dotnet-install:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Run fetch-latest-dotnet-install.sh
run: src/dotnet/scripts/fetch-latest-dotnet-install.sh

- name: Create a PR for dotnet-install.sh
id: push_image_info
env:
GITHUB_TOKEN: ${{ secrets.PAT }}
run: |
set -e
echo "Start."
# Configure git and Push updates
git config --global user.email [email protected]
git config --global user.name github-actions
git config pull.rebase false
branch=automated-script-update-$GITHUB_RUN_ID
git checkout -b $branch
message='[Updates] Automated vendor 'dotnet-install' script'
# Add / update and commit
git add src/dotnet/scripts/vendor/dotnet-install.sh
git commit -m 'Automated dotnet-install script update' || export NO_UPDATES=true
# Push
if [ "$NO_UPDATES" != "true" ] ; then
git push origin "$branch"
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
/repos/${GITHUB_REPOSITORY}/pulls \
-f title="$message" \
-f body="$message" \
-f head="$branch" \
-f base="$GITHUB_REF_NAME"
fi
67 changes: 67 additions & 0 deletions src/dotnet/NOTES.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,71 @@
## Configuration examples

Installing only the latest .NET SDK version (the default).

``` json
{
"features": {
"ghcr.io/devcontainers/features/dotnet:2": "latest" // or "" or {}
}
```

Installing an additional SDK version. Multiple versions can be specified as comma-separated values.

``` json
{
"features": {
"ghcr.io/devcontainers/features/dotnet:2": {
"additionalVersions": "lts"
}
}
```

Installing specific SDK versions.

``` json
{
"features": {
"ghcr.io/devcontainers/features/dotnet:2": {
"version": "6.0",
"additionalVersions": "7.0, 8.0"
}
}
```

Installing a specific SDK feature band.

``` json
{
"features": {
"ghcr.io/devcontainers/features/dotnet:2": {
"version": "6.0.4xx",
}
}
```

Installing a specific SDK patch version.

``` json
{
"features": {
"ghcr.io/devcontainers/features/dotnet:2": {
"version": "6.0.412",
}
}
```

Installing only the .NET Runtime or the ASP.NET Core Runtime. (The SDK includes all runtimes so this configuration is only useful if you need to run .NET apps without building them from source.)

``` json
{
"features": {
"ghcr.io/devcontainers/features/dotnet:2": {
"version": "none",
"dotnetRuntimeVersions": "latest, lts",
"aspnetCoreRuntimeVersions": "latest, lts",
}
}
```

## OS Support

Expand Down
41 changes: 25 additions & 16 deletions src/dotnet/devcontainer-feature.json
Original file line number Diff line number Diff line change
@@ -1,35 +1,44 @@
{
"id": "dotnet",
"version": "1.1.4",
"version": "2.0.0",
"name": "Dotnet CLI",
"documentationURL": "https://github.com/devcontainers/features/tree/main/src/dotnet",
"description": "Installs the .NET CLI. Provides option of installing sdk or runtime, and option of versions to install. Uses latest version of .NET sdk as defaults to install.",
"description": "This Feature installs the latest .NET SDK, which includes the .NET CLI and the shared runtime. Options are provided to choose a different version or additional versions.",
"options": {
"version": {
"type": "string",
"proposals": [
"latest",
"7",
"6",
"3.1"
"lts",
"none",
"8.0",
"7.0",
"6.0"
],
"default": "latest",
"description": "Select or enter a dotnet CLI version. (Available versions may vary by Linux distribution.)"
"description": "Select or enter a .NET SDK version. Use 'latest' for the latest version, 'lts' for the latest LTS version, 'X.Y' or 'X.Y.Z' for a specific version."
},
"runtimeOnly": {
"type": "boolean",
"default": false,
"description": "Install just the dotnet runtime if true, and sdk if false."
"additionalVersions": {
"type": "string",
"default": "",
"description": "Enter additional .NET SDK versions, separated by commas. Use 'latest' for the latest version, 'lts' for the latest LTS version, 'X.Y' or 'X.Y.Z' for a specific version."
},
"dotnetRuntimeVersions": {
"type": "string",
"default": "",
"description": "Enter additional .NET runtime versions, separated by commas. Use 'latest' for the latest version, 'lts' for the latest LTS version, 'X.Y' or 'X.Y.Z' for a specific version."
},
"installUsingApt": {
"type": "boolean",
"default": true,
"description": "If true, it installs using apt instead of the release URL"
"aspNetCoreRuntimeVersions": {
"type": "string",
"default": "",
"description": "Enter additional ASP.NET Core runtime versions, separated by commas. Use 'latest' for the latest version, 'lts' for the latest LTS version, 'X.Y' or 'X.Y.Z' for a specific version."
}
},
"containerEnv": {
"DOTNET_ROOT": "/usr/local/dotnet/current",
"PATH": "/usr/local/dotnet/current:${PATH}"
"DOTNET_ROOT": "/usr/share/dotnet",
"PATH": "$PATH:$DOTNET_ROOT:~/.dotnet/tools",
"DOTNET_RUNNING_IN_CONTAINER": "true",
"DOTNET_USE_POLLING_FILE_WATCHER": "true"
},
"customizations": {
"vscode": {
Expand Down
Loading

0 comments on commit 96c1eea

Please sign in to comment.