Skip to content

Commit

Permalink
Use one Julia project per Julia minor version
Browse files Browse the repository at this point in the history
  • Loading branch information
davidanthoff committed Jul 30, 2022
1 parent 82bf45c commit 1cea5a4
Show file tree
Hide file tree
Showing 14 changed files with 140 additions and 31 deletions.
18 changes: 9 additions & 9 deletions .github/workflows/main.yml
Expand Up @@ -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
Expand Down
8 changes: 8 additions & 0 deletions scripts/languageserver/main.jl
Expand Up @@ -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
Expand Down
6 changes: 6 additions & 0 deletions scripts/packagedev/tagnewpackageversion.jl
Expand Up @@ -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()

Expand Down
11 changes: 10 additions & 1 deletion 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


Expand Down
5 changes: 2 additions & 3 deletions src/extension.ts
Expand Up @@ -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: {
Expand Down
4 changes: 0 additions & 4 deletions src/packagedevtools.ts
Expand Up @@ -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')
},

}
)

Expand Down
20 changes: 20 additions & 0 deletions 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"),
])
@@ -0,0 +1,3 @@
using Pkg

Pkg.add("PkgDev")
@@ -0,0 +1,5 @@
using Pkg

Pkg.develop([
PackageSpec(path="../../../packages/PackageCompiler"),
])
@@ -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"),
])
@@ -0,0 +1,5 @@
using Pkg

Pkg.develop([
PackageSpec(path="../../../packages/VSCodeDebugger"),
])
@@ -0,0 +1,5 @@
using Pkg

Pkg.develop([
PackageSpec(path="../../../packages/VSCodeServer"),
])
66 changes: 58 additions & 8 deletions src/scripts/updateDeps.ts
Expand Up @@ -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() })
}
Expand Down
6 changes: 0 additions & 6 deletions src/tasks.ts
Expand Up @@ -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(
Expand Down

0 comments on commit 1cea5a4

Please sign in to comment.