Add initial codespaces support for dotnet/runtime (#59723)
authorEric Erhardt <eric.erhardt@microsoft.com>
Wed, 29 Sep 2021 16:41:36 +0000 (11:41 -0500)
committerGitHub <noreply@github.com>
Wed, 29 Sep 2021 16:41:36 +0000 (11:41 -0500)
* Add initial codespaces support for dotnet/runtime

* Enable codespaces-prebuild

.devcontainer/Dockerfile [new file with mode: 0644]
.devcontainer/devcontainer.json [new file with mode: 0644]
.devcontainer/scripts/onCreateCommand.sh [new file with mode: 0644]
.github/workflows/create-codespaces-prebuild.yml [new file with mode: 0644]
.gitignore

diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
new file mode 100644 (file)
index 0000000..31ff731
--- /dev/null
@@ -0,0 +1,12 @@
+# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.192.0/containers/dotnet/.devcontainer/base.Dockerfile
+
+# [Choice] .NET version: 5.0, 3.1, 2.1
+ARG VARIANT="5.0"
+FROM mcr.microsoft.com/vscode/devcontainers/dotnet:0-${VARIANT}
+
+# Set up machine requirements to build the repo
+RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
+    && apt-get -y install --no-install-recommends cmake llvm-9 clang-9 \
+        build-essential python curl git lldb-6.0 liblldb-6.0-dev \
+        libunwind8 libunwind8-dev gettext libicu-dev liblttng-ust-dev \
+        libssl-dev libnuma-dev libkrb5-dev zlib1g-dev ninja-build
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644 (file)
index 0000000..b3dfd99
--- /dev/null
@@ -0,0 +1,35 @@
+// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
+// https://github.com/microsoft/vscode-dev-containers/tree/v0.192.0/containers/dotnet
+{
+       "name": "C# (.NET)",
+       "build": {
+               "dockerfile": "Dockerfile",
+               "args": { 
+                       // Update 'VARIANT' to pick a .NET Core version: 2.1, 3.1, 5.0
+                       "VARIANT": "5.0",
+               }
+       },
+
+       "settings": {
+               // Loading projects on demand is better for larger codebases
+               "omnisharp.enableMsBuildLoadProjectsOnDemand": true
+       },
+
+       // Add the IDs of extensions you want installed when the container is created.
+       "extensions": [
+               "ms-dotnettools.csharp"
+       ],
+
+       // Use 'onCreateCommand' to run pre-build commands inside the codespace
+       "onCreateCommand": "${containerWorkspaceFolder}/.devcontainer/scripts/onCreateCommand.sh",
+
+       // Add the locally installed dotnet to the path to ensure that it is activated
+       // This allows developers to just use 'dotnet build' on the command-line, and the local dotnet version will be used.
+       "remoteEnv": {
+               "PATH": "${containerWorkspaceFolder}/.dotnet:${containerEnv:PATH}",
+               "DOTNET_MULTILEVEL_LOOKUP": "0"
+       },
+
+       // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
+       "remoteUser": "vscode"
+}
diff --git a/.devcontainer/scripts/onCreateCommand.sh b/.devcontainer/scripts/onCreateCommand.sh
new file mode 100644 (file)
index 0000000..dc0154c
--- /dev/null
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+
+set -e
+
+# prebuild the repo, so it is ready for development
+./build.sh libs+clr -rc Release
diff --git a/.github/workflows/create-codespaces-prebuild.yml b/.github/workflows/create-codespaces-prebuild.yml
new file mode 100644 (file)
index 0000000..6b55740
--- /dev/null
@@ -0,0 +1,17 @@
+name: Create Codespaces Prebuild
+on:
+  schedule:
+    # Run at 06:00 am UTC every day
+    - cron:  '0 6 * * *'
+  workflow_dispatch:
+jobs:
+  createPrebuild:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - uses: github/codespaces-precache@v1.0.1
+        with:
+          regions: WestUs2
+          sku_name: standardLinux32gb
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
index 5988176..dbdbce2 100644 (file)
@@ -279,7 +279,6 @@ Session.vim
 
 # Visual Studio Code
 .vscode/
-.devcontainer/
 
 # Private test configuration and binaries.
 config.ps1