From 1cea5a4ee0409434818c5ba9e08b33976163b180 Mon Sep 17 00:00:00 2001 From: David Anthoff Date: Sat, 30 Jul 2022 15:54:36 -0700 Subject: [PATCH] Use one Julia project per Julia minor version --- .github/workflows/main.yml | 18 ++--- scripts/languageserver/main.jl | 8 +++ scripts/packagedev/tagnewpackageversion.jl | 6 ++ scripts/tasks/task_compileenv.jl | 11 +++- src/extension.ts | 5 +- src/packagedevtools.ts | 4 -- .../create_ls_project.jl | 20 ++++++ .../create_pkgdev_project.jl | 3 + .../create_sysimagecompile_project.jl | 5 ++ .../create_test_debugadapter_project.jl | 9 +++ .../create_test_vscodedebugger_project.jl | 5 ++ .../create_test_vscodeserver_project.jl | 5 ++ src/scripts/updateDeps.ts | 66 ++++++++++++++++--- src/tasks.ts | 6 -- 14 files changed, 140 insertions(+), 31 deletions(-) create mode 100644 src/scripts/juliaprojectcreatescripts/create_ls_project.jl create mode 100644 src/scripts/juliaprojectcreatescripts/create_pkgdev_project.jl create mode 100644 src/scripts/juliaprojectcreatescripts/create_sysimagecompile_project.jl create mode 100644 src/scripts/juliaprojectcreatescripts/create_test_debugadapter_project.jl create mode 100644 src/scripts/juliaprojectcreatescripts/create_test_vscodedebugger_project.jl create mode 100644 src/scripts/juliaprojectcreatescripts/create_test_vscodeserver_project.jl diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 18181e60d..8f28a6b0d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -110,15 +110,15 @@ jobs: - name: 'Run the Julia tests' run: | julia -e 'using InteractiveUtils; versioninfo()' - julia --project=./scripts/environments/languageserver -e 'using Pkg; Pkg.resolve()' - julia --project=./scripts/environments/languageserver -e 'using Pkg; Pkg.test("CSTParser", coverage=true)' - julia --project=./scripts/environments/languageserver -e 'using Pkg; Pkg.test("JSONRPC", coverage=true)' - julia --project=./scripts/environments/languageserver -e 'using Pkg; Pkg.test("LanguageServer", coverage=true)' - julia --project=./scripts/environments/languageserver -e 'using Pkg; Pkg.test("StaticLint", coverage=true)' - julia --project=./scripts/environments/languageserver -e 'using Pkg; Pkg.test("SymbolServer", coverage=true)' - julia --project=./scripts/testenvironments/debugadapter -e 'using Pkg; Pkg.test("DebugAdapter", coverage=true)' - julia --project=./scripts/testenvironments/vscodedebugger -e 'using Pkg; Pkg.test("VSCodeDebugger", coverage=true)' - julia --project=./scripts/testenvironments/vscodeserver -e 'using Pkg; Pkg.test("VSCodeServer", coverage=true)' + julia --project=./scripts/environments/languageserver/v${{matrix.julia_version}} -e 'using Pkg; Pkg.resolve()' + julia --project=./scripts/environments/languageserver/v${{matrix.julia_version}} -e 'using Pkg; Pkg.test("CSTParser", coverage=true)' + julia --project=./scripts/environments/languageserver/v${{matrix.julia_version}} -e 'using Pkg; Pkg.test("JSONRPC", coverage=true)' + julia --project=./scripts/environments/languageserver/v${{matrix.julia_version}} -e 'using Pkg; Pkg.test("LanguageServer", coverage=true)' + julia --project=./scripts/environments/languageserver/v${{matrix.julia_version}} -e 'using Pkg; Pkg.test("StaticLint", coverage=true)' + julia --project=./scripts/environments/languageserver/v${{matrix.julia_version}} -e 'using Pkg; Pkg.test("SymbolServer", coverage=true)' + julia --project=./scripts/testenvironments/debugadapter/v${{matrix.julia_version}} -e 'using Pkg; Pkg.test("DebugAdapter", coverage=true)' + julia --project=./scripts/testenvironments/vscodedebugger/v${{matrix.julia_version}} -e 'using Pkg; Pkg.test("VSCodeDebugger", coverage=true)' + julia --project=./scripts/testenvironments/vscodeserver/v${{matrix.julia_version}} -e 'using Pkg; Pkg.test("VSCodeServer", coverage=true)' buildReleaseVSIX: name: Build Release VSIX diff --git a/scripts/languageserver/main.jl b/scripts/languageserver/main.jl index 4d2f49a57..97db63208 100644 --- a/scripts/languageserver/main.jl +++ b/scripts/languageserver/main.jl @@ -2,6 +2,14 @@ if VERSION < v"1.0.0" error("VS Code julia language server only works with julia 1.0.0+") end +import Pkg +version_specific_env_path = joinpath(@__DIR__, "..", "environments", "languageserver", "v$(VERSION.major).$(VERSION.minor)") +if isdir(version_specific_env_path) + Pkg.activate(version_specific_env_path) +else + Pkg.activate(joinpath(@__DIR__, "..", "environments", "languageserver", "fallback")) +end + @debug "Julia started at $(round(Int, time()))" using Logging diff --git a/scripts/packagedev/tagnewpackageversion.jl b/scripts/packagedev/tagnewpackageversion.jl index 70ea39021..1711c8e84 100644 --- a/scripts/packagedev/tagnewpackageversion.jl +++ b/scripts/packagedev/tagnewpackageversion.jl @@ -5,6 +5,12 @@ if VERSION < v"1.6" end using Pkg +version_specific_env_path = joinpath(@__DIR__, "..", "environments", "pkgdev", "v$(VERSION.major).$(VERSION.minor)") +if isdir(version_specific_env_path) + Pkg.activate(version_specific_env_path) +else + Pkg.activate(joinpath(@__DIR__, "..", "environments", "pkgdev", "fallback")) +end Pkg.instantiate() diff --git a/scripts/tasks/task_compileenv.jl b/scripts/tasks/task_compileenv.jl index 0eba1c9cd..eff01795b 100644 --- a/scripts/tasks/task_compileenv.jl +++ b/scripts/tasks/task_compileenv.jl @@ -1,4 +1,13 @@ -import Pkg, Libdl, PackageCompiler +import Pkg +version_specific_env_path = joinpath(@__DIR__, "..", "environments", "sysimagecompile", "v$(VERSION.major).$(VERSION.minor)") +if isdir(version_specific_env_path) + Pkg.activate(version_specific_env_path) +else + Pkg.activate(joinpath(@__DIR__, "..", "environments", "sysimagecompile", "fallback")) +end + + +import Libdl, PackageCompiler import TOML diff --git a/src/extension.ts b/src/extension.ts index 894f213aa..6d7f88764 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -246,9 +246,8 @@ async function startLanguageServer(juliaExecutablesFeature: JuliaExecutablesFeat const languageServerDepotPath = path.join(storagePath, 'lsdepot', 'v1') await fs.createDirectory(languageServerDepotPath) const oldDepotPath = process.env.JULIA_DEPOT_PATH ? process.env.JULIA_DEPOT_PATH : '' - const envForLSPath = path.join(g_context.extensionPath, 'scripts', 'environments', 'languageserver') - const serverArgsRun: string[] = ['--startup-file=no', '--history-file=no', '--depwarn=no', `--project=${envForLSPath}`, 'main.jl', jlEnvPath, '--debug=no', telemetry.getCrashReportingPipename(), oldDepotPath, storagePath, useSymserverDownloads, symserverUpstream, '--detached=no'] - const serverArgsDebug: string[] = ['--startup-file=no', '--history-file=no', '--depwarn=no', `--project=${envForLSPath}`, 'main.jl', jlEnvPath, '--debug=yes', telemetry.getCrashReportingPipename(), oldDepotPath, storagePath, useSymserverDownloads, symserverUpstream, '--detached=no'] + const serverArgsRun: string[] = ['--startup-file=no', '--history-file=no', '--depwarn=no', 'main.jl', jlEnvPath, '--debug=no', telemetry.getCrashReportingPipename(), oldDepotPath, storagePath, useSymserverDownloads, symserverUpstream, '--detached=no'] + const serverArgsDebug: string[] = ['--startup-file=no', '--history-file=no', '--depwarn=no', 'main.jl', jlEnvPath, '--debug=yes', telemetry.getCrashReportingPipename(), oldDepotPath, storagePath, useSymserverDownloads, symserverUpstream, '--detached=no'] const spawnOptions = { cwd: path.join(g_context.extensionPath, 'scripts', 'languageserver'), env: { diff --git a/src/packagedevtools.ts b/src/packagedevtools.ts index 49c390602..da874113f 100644 --- a/src/packagedevtools.ts +++ b/src/packagedevtools.ts @@ -40,10 +40,6 @@ export class JuliaPackageDevFeature { resultVersion ], cwd: vscode.workspace.workspaceFolders[0].uri.fsPath, - env: { - JULIA_PROJECT: path.join(this.context.extensionPath, 'scripts', 'environments', 'pkgdev') - }, - } ) diff --git a/src/scripts/juliaprojectcreatescripts/create_ls_project.jl b/src/scripts/juliaprojectcreatescripts/create_ls_project.jl new file mode 100644 index 000000000..62a796b9e --- /dev/null +++ b/src/scripts/juliaprojectcreatescripts/create_ls_project.jl @@ -0,0 +1,20 @@ +using Pkg + +Pkg.develop([ + PackageSpec(path="../../../packages/CSTParser"), + PackageSpec(path="../../../packages/CommonMark"), + PackageSpec(path="../../../packages/Compat"), + PackageSpec(path="../../../packages/Crayons"), + PackageSpec(path="../../../packages/DataStructures"), + PackageSpec(path="../../../packages/FilePathsBase"), + PackageSpec(path="../../../packages/JSON"), + PackageSpec(path="../../../packages/JSONRPC"), + PackageSpec(path="../../../packages/JuliaFormatter"), + PackageSpec(path="../../../packages/LanguageServer"), + PackageSpec(path="../../../packages/OrderedCollections"), + PackageSpec(path="../../../packages/StaticLint"), + PackageSpec(path="../../../packages/SymbolServer"), + PackageSpec(path="../../../packages/Tokenize"), + PackageSpec(path="../../../packages/URIParser"), + PackageSpec(path="../../../packages/URIs"), +]) diff --git a/src/scripts/juliaprojectcreatescripts/create_pkgdev_project.jl b/src/scripts/juliaprojectcreatescripts/create_pkgdev_project.jl new file mode 100644 index 000000000..46b261300 --- /dev/null +++ b/src/scripts/juliaprojectcreatescripts/create_pkgdev_project.jl @@ -0,0 +1,3 @@ +using Pkg + +Pkg.add("PkgDev") diff --git a/src/scripts/juliaprojectcreatescripts/create_sysimagecompile_project.jl b/src/scripts/juliaprojectcreatescripts/create_sysimagecompile_project.jl new file mode 100644 index 000000000..211f3d333 --- /dev/null +++ b/src/scripts/juliaprojectcreatescripts/create_sysimagecompile_project.jl @@ -0,0 +1,5 @@ +using Pkg + +Pkg.develop([ + PackageSpec(path="../../../packages/PackageCompiler"), +]) diff --git a/src/scripts/juliaprojectcreatescripts/create_test_debugadapter_project.jl b/src/scripts/juliaprojectcreatescripts/create_test_debugadapter_project.jl new file mode 100644 index 000000000..3ba024794 --- /dev/null +++ b/src/scripts/juliaprojectcreatescripts/create_test_debugadapter_project.jl @@ -0,0 +1,9 @@ +using Pkg + +Pkg.develop([ + PackageSpec(path="../../../packages/CodeTracking"), + PackageSpec(path="../../../packages/DebugAdapter"), + PackageSpec(path="../../../packages/JSON"), + PackageSpec(path="../../../packages/JSONRPC"), + VERSION >= v"v1.6.0" ? PackageSpec(path="../../../packages/JuliaInterpreter") : PackageSpec(path="../../../packages-old/JuliaInterpreter"), +]) diff --git a/src/scripts/juliaprojectcreatescripts/create_test_vscodedebugger_project.jl b/src/scripts/juliaprojectcreatescripts/create_test_vscodedebugger_project.jl new file mode 100644 index 000000000..2bb7af4df --- /dev/null +++ b/src/scripts/juliaprojectcreatescripts/create_test_vscodedebugger_project.jl @@ -0,0 +1,5 @@ +using Pkg + +Pkg.develop([ + PackageSpec(path="../../../packages/VSCodeDebugger"), +]) diff --git a/src/scripts/juliaprojectcreatescripts/create_test_vscodeserver_project.jl b/src/scripts/juliaprojectcreatescripts/create_test_vscodeserver_project.jl new file mode 100644 index 000000000..bf8d17d4f --- /dev/null +++ b/src/scripts/juliaprojectcreatescripts/create_test_vscodeserver_project.jl @@ -0,0 +1,5 @@ +using Pkg + +Pkg.develop([ + PackageSpec(path="../../../packages/VSCodeServer"), +]) diff --git a/src/scripts/updateDeps.ts b/src/scripts/updateDeps.ts index caafa13b8..f4e00dc7c 100644 --- a/src/scripts/updateDeps.ts +++ b/src/scripts/updateDeps.ts @@ -75,15 +75,65 @@ async function main() { await cp.exec(`git checkout ${newestTag.original}`, { cwd: path.join(process.cwd(), `scripts/packages/${pkg}`) }) } - // Note that this "+1.3.1" argument currently only works with a juliaup installation - await cp.exec(`julia "+release" --project=. -e "using Pkg; Pkg.resolve()"`, { cwd: path.join(process.cwd(), 'scripts/environments/development') }) - await cp.exec(`julia "+1.3.1" --project=. -e "using Pkg; Pkg.resolve()"`, { cwd: path.join(process.cwd(), 'scripts/environments/languageserver') }) - await cp.exec(`julia "+1.6" --project=. -e "using Pkg; Pkg.resolve()"`, { cwd: path.join(process.cwd(), 'scripts/environments/sysimagecompile') }) - await cp.exec(`julia "+1.3.1" --project=. -e "using Pkg; Pkg.resolve()"`, { cwd: path.join(process.cwd(), 'scripts/testenvironments/debugadapter') }) - await cp.exec(`julia "+1.3.1" --project=. -e "using Pkg; Pkg.resolve()"`, { cwd: path.join(process.cwd(), 'scripts/testenvironments/vscodedebugger') }) - await cp.exec(`julia "+1.3.1" --project=. -e "using Pkg; Pkg.resolve()"`, { cwd: path.join(process.cwd(), 'scripts/testenvironments/vscodeserver') }) + // Update various project files + // ============================ + + await fs.rmdir(path.join(process.cwd(), 'scripts/environments/languageserver'), { recursive: true }) + await fs.rmdir(path.join(process.cwd(), 'scripts/environments/pgkdev'), { recursive: true }) + await fs.rmdir(path.join(process.cwd(), 'scripts/environments/sysimagecompile'), { recursive: true }) + + await fs.rmdir(path.join(process.cwd(), 'scripts/testenvironments/debugadapter'), { recursive: true }) + await fs.rmdir(path.join(process.cwd(), 'scripts/testenvironments/vscodedebugger'), { recursive: true }) + await fs.rmdir(path.join(process.cwd(), 'scripts/testenvironments/vscodeserver'), { recursive: true }) + for (const v of ['1.0', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6', '1.7']) { + const env_path_ls = path.join(process.cwd(), 'scripts/environments/languageserver', `v${v}`) + await fs.mkdir(env_path_ls, { recursive: true }) + await cp.exec(`julia "+${v}" --project=. ${path.join(process.cwd(), 'src/scripts/juliaprojectcreatescripts/create_ls_project.jl')}`, { cwd: env_path_ls }) + + if(new semver.SemVer(`${v}.0`)>=new semver.SemVer('1.6.0')) { + const env_path_pkgdev = path.join(process.cwd(), 'scripts/environments/pkgdev', `v${v}`) + await fs.mkdir(env_path_pkgdev, { recursive: true }) + await cp.exec(`julia "+${v}" --project=. ${path.join(process.cwd(), 'src/scripts/juliaprojectcreatescripts/create_pkgdev_project.jl')}`, { cwd: env_path_pkgdev }) + } + + const env_path_sysimagecompile = path.join(process.cwd(), 'scripts/environments/sysimagecompile', `v${v}`) + await fs.mkdir(env_path_sysimagecompile, { recursive: true }) + await cp.exec(`julia "+${v}" --project=. ${path.join(process.cwd(), 'src/scripts/juliaprojectcreatescripts/create_sysimagecompile_project.jl')}`, { cwd: env_path_sysimagecompile }) + + const env_path_test_debugadapter = path.join(process.cwd(), 'scripts/testenvironments/debugadapter', `v${v}`) + await fs.mkdir(env_path_test_debugadapter, { recursive: true }) + await cp.exec(`julia "+${v}" --project=. ${path.join(process.cwd(), 'src/scripts/juliaprojectcreatescripts/create_test_debugadapter_project.jl')}`, { cwd: env_path_test_debugadapter }) + + const env_path_test_vscodedebugger = path.join(process.cwd(), 'scripts/testenvironments/vscodedebugger', `v${v}`) + await fs.mkdir(env_path_test_vscodedebugger, { recursive: true }) + await cp.exec(`julia "+${v}" --project=. ${path.join(process.cwd(), 'src/scripts/juliaprojectcreatescripts/create_test_vscodedebugger_project.jl')}`, { cwd: env_path_test_vscodedebugger }) + + const env_path_test_vscodeserver = path.join(process.cwd(), 'scripts/testenvironments/vscodeserver', `v${v}`) + await fs.mkdir(env_path_test_vscodeserver, { recursive: true }) + await cp.exec(`julia "+${v}" --project=. ${path.join(process.cwd(), 'src/scripts/juliaprojectcreatescripts/create_test_vscodeserver_project.jl')}`, { cwd: env_path_test_vscodeserver }) + + } - await cp.exec(`julia "+1.6" --project=. -e "using Pkg; Pkg.update()"`, { cwd: path.join(process.cwd(), 'scripts/environments/pkgdev') }) + // We also add a fallback release env in case a user has a Julia version we don't know about + await fs.mkdir(path.join(process.cwd(), 'scripts/environments/languageserver/fallback'), { recursive: true }) + await fs.mkdir(path.join(process.cwd(), 'scripts/environments/pkgdev/fallback'), { recursive: true }) + await fs.mkdir(path.join(process.cwd(), 'scripts/environments/sysimagecompile/fallback'), { recursive: true }) + await cp.exec(`julia "+release" --project=. ${path.join(process.cwd(), 'src/scripts/juliaprojectcreatescripts/create_ls_project.jl')}`, { cwd: path.join(process.cwd(), 'scripts/environments/languageserver/fallback') }) + await cp.exec(`julia "+release" --project=. ${path.join(process.cwd(), 'src/scripts/juliaprojectcreatescripts/create_pkgdev_project.jl')}`, { cwd: path.join(process.cwd(), 'scripts/environments/pkgdev/fallback') }) + await cp.exec(`julia "+release" --project=. ${path.join(process.cwd(), 'src/scripts/juliaprojectcreatescripts/create_sysimagecompile_project.jl')}`, { cwd: path.join(process.cwd(), 'scripts/environments/sysimagecompile/fallback') }) + + // Julia 1.0 and 1.1 write backslash in relative paths in Manifest files, which we don't want + const manifest_content_1 = await fs.readFile(path.join(process.cwd(), 'scripts/environments/languageserver/v1.0/Manifest.toml')) + await fs.writeFile(path.join(process.cwd(), 'scripts/environments/languageserver/v1.0/Manifest.toml'), manifest_content_1.toString().replace (/\\\\/g, '/')) + const manifest_content_2 = await fs.readFile(path.join(process.cwd(), 'scripts/environments/languageserver/v1.1/Manifest.toml')) + await fs.writeFile(path.join(process.cwd(), 'scripts/environments/languageserver/v1.1/Manifest.toml'), manifest_content_2.toString().replace(/\\\\/g, '/')) + const manifest_content_3 = await fs.readFile(path.join(process.cwd(), 'scripts/environments/sysimagecompile/v1.0/Manifest.toml')) + await fs.writeFile(path.join(process.cwd(), 'scripts/environments/sysimagecompile/v1.0/Manifest.toml'), manifest_content_3.toString().replace (/\\\\/g, '/')) + const manifest_content_4 = await fs.readFile(path.join(process.cwd(), 'scripts/environments/sysimagecompile/v1.1/Manifest.toml')) + await fs.writeFile(path.join(process.cwd(), 'scripts/environments/sysimagecompile/v1.1/Manifest.toml'), manifest_content_4.toString().replace(/\\\\/g, '/')) + + // We keep the dev environment on the latest release version always + await cp.exec(`julia "+release" --project=. -e "using Pkg; Pkg.resolve()"`, { cwd: path.join(process.cwd(), 'scripts/environments/development') }) await cp.exec('npm update', { cwd: process.cwd() }) } diff --git a/src/tasks.ts b/src/tasks.ts index 5e996707b..f759ad5ea 100644 --- a/src/tasks.ts +++ b/src/tasks.ts @@ -140,12 +140,6 @@ class JuliaTaskProvider { new vscode.ProcessExecution(juliaExecutable.file, [ ...juliaExecutable.args, '--color=yes', - `--project=${path.join( - this.context.extensionPath, - 'scripts', - 'environments', - 'sysimagecompile' - )}`, '--startup-file=no', '--history-file=no', path.join(