From 56fea04714fcbdfe90d5cf13b3d29a83d0743153 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Fri, 20 Dec 2024 22:20:27 +0100 Subject: [PATCH 01/12] Fix link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c4e0fbc..e5bb002 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ [![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://julia-vscode.github.io/JuliaWorkspaces.jl/dev) -[![Build Status](https://github.com/julia-vscode/JuliaWorkspaces.jl/actions/workflows/jlpkgbutler-ci-master-workflow.yml/badge.svg?branch=main)](https://github.com/julia-vscode/JuliaWorkspaces.jl/actions/workflows/jlpkgbutler-ci-master-workflow.yml]]) +[![Build Status](https://github.com/julia-vscode/JuliaWorkspaces.jl/actions/workflows/jlpkgbutler-ci-master-workflow.yml/badge.svg?branch=main)](https://github.com/julia-vscode/JuliaWorkspaces.jl/actions/workflows/jlpkgbutler-ci-master-workflow.yml) # JuliaWorkspaces.jl From deddcc24667a74554753da2267915325f337241f Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Fri, 20 Dec 2024 23:41:31 +0100 Subject: [PATCH 02/12] add page development to docu --- docs/make.jl | 3 ++- docs/src/development.md | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 docs/src/development.md diff --git a/docs/make.jl b/docs/make.jl index 079c107..5b27ba2 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -8,7 +8,8 @@ makedocs( pages=[ "Home" => "index.md", "Functions" => "functions.md", - "Types" => "types.md" + "Types" => "types.md", + "Development" => "development.md" ]) deploydocs(repo="github.com/julia-vscode/JuliaWorkspaces.jl.git") diff --git a/docs/src/development.md b/docs/src/development.md new file mode 100644 index 0000000..49617ea --- /dev/null +++ b/docs/src/development.md @@ -0,0 +1,22 @@ +# Development + +## Compiling the documentation locally +When you are working on the documentation you want to compile it locally to check for syntax errors and to check if it looks right. + +To do that, it is suggested to install the package `LiveServer` globally: +```bash +julia -e 'using Pkg; Pkg.add("LiveServer")' +``` + +Then, you can use the following script to build the documentation and to launch a documentation server at the URL [http://localhost:8000](http://localhost:8000): +```bash +#!/bin/bash -eu +# This script is used to serve the documentation locally. + +if [[ $(basename $(pwd)) == "bin" ]]; then + cd .. +fi +julia --project="./docs/." -e 'using Pkg; Pkg.instantiate()' +LANG=en_US julia --project="./docs/." -e 'include("docs/make.jl"); using LiveServer; servedocs()' +``` +I suggest to place this script in the `bin` folder, which you might have to create first. \ No newline at end of file From 749e087c662b709130eb743eaee800b24fd6cb28 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Fri, 20 Dec 2024 23:46:02 +0100 Subject: [PATCH 03/12] update docu --- docs/src/development.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/src/development.md b/docs/src/development.md index 49617ea..42f892e 100644 --- a/docs/src/development.md +++ b/docs/src/development.md @@ -19,4 +19,9 @@ fi julia --project="./docs/." -e 'using Pkg; Pkg.instantiate()' LANG=en_US julia --project="./docs/." -e 'include("docs/make.jl"); using LiveServer; servedocs()' ``` -I suggest to place this script in the `bin` folder, which you might have to create first. \ No newline at end of file +I suggest to save this script under the name `doc` in the `bin` folder, which you might have to create first. +You can then build the documentation with the command: +``` +./bin/doc +``` +On Linux, you have to make it executable first: `chmod +x ./bin/doc`. \ No newline at end of file From 4c5d531da951f198a2370b7c3562a968af9c7161 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Sat, 21 Dec 2024 00:27:13 +0100 Subject: [PATCH 04/12] Improve README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index e5bb002..6473fd5 100644 --- a/README.md +++ b/README.md @@ -14,3 +14,7 @@ The second transition is towards a more functional/immutable/incremental computa ### Goal Very roughly, StaticLint/CSTParser/SymbolServer has all the code pre these transitions, and JuliaWorkspaces has the code that is in this new world of the two transitions I mentioned above. So the division is by generation of when stuff was added to the LS, not by functionality. My expectation is that once the transition is finished, StaticLint and SymbolServer will be no more as individual packages but their code will have been incorporated into JuliaWorkspaces. The final design I have in mind is that the [LanguageServer.jl](https://github.com/julia-vscode/LanguageServer.jl) package really only has the code that implements the LSP wire protocol, but not much functionality in it, and all the functionality lives in JuliaWorkspaces. The idea being that we can then create for example CI tools that use the functionality in JuliaWorkspaces directly (like GitHub - julia-actions/julia-lint), or command line apps etc. + +### Help wanted +While the refactoring of the code - a least in the beginning - should be done by the core team, help to improve +related packages would be very welcome. For details, have a look at [#47](https://github.com/julia-vscode/JuliaWorkspaces.jl/issues/47). \ No newline at end of file From ab60efcd1fdfcc944fa08bcfa5c2500b70f4ba07 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Sat, 21 Dec 2024 00:39:30 +0100 Subject: [PATCH 05/12] Add links --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6473fd5..27b01f9 100644 --- a/README.md +++ b/README.md @@ -3,17 +3,17 @@ # JuliaWorkspaces.jl -Underlying engine for LanguageServer.jl +Underlying engine for [LanguageServer.jl](https://github.com/julia-vscode/LanguageServer.jl) (LS), an implementation of the Microsoft Language Server Protocol for the Julia language. ## Design ideas ### Planned transitions -The first transition is that we want to adopt JuliaSyntax.jl for parsing and probably also its node types for representing code. Most of the LS at the moment is powered by CSTParser, which has its own parsing implementation and brings the main node type along that is used throughout the LS. At the same time, we have started to use JuliaSyntax in the LS (yes, at the moment everything gets parsed twice, once by CSTParser and once by JuliaSyntax) for some things, namely the test item detection stuff. The roadmap here is that I want to completely get rid of the CSTParser parser and exclusively use the JuliaSyntax parser. The medium term plan is that we will have one parsing pass that then generates trees for the old CSTParser node types and the JuliaSyntax node types. Once we are at that stage we’ll need to spend some more time thinking about node types and what exactly is the right fit for the LS. +The first transition is that we want to adopt [JuliaSyntax.jl](https://github.com/JuliaLang/JuliaSyntax.jl) for parsing and probably also its node types for representing code. Most of the LS at the moment is powered by [CSTParser](https://github.com/julia-vscode/CSTParser.jl), which has its own parsing implementation and brings the main node type along that is used throughout the LS. At the same time, we have started to use JuliaSyntax in the LS (yes, at the moment everything gets parsed twice, once by CSTParser and once by JuliaSyntax) for some things, namely the test item detection stuff. The roadmap here is that I want to completely get rid of the CSTParser parser and exclusively use the JuliaSyntax parser. The medium term plan is that we will have one parsing pass that then generates trees for the old CSTParser node types and the JuliaSyntax node types. Once we are at that stage we’ll need to spend some more time thinking about node types and what exactly is the right fit for the LS. The second transition is towards a more functional/immutable/incremental computational model for most of the logic in the LS. At the moment the LS uses mutable data structures throughout, and keeping track of where state is mutated, and when is really, really tricky (well, at least for me). It also makes it completely hopeless that we might use multi threading at some point, for example. So this summer I started tackling that problem, and the strategy for that is that we use [Salsa.jl](https://github.com/julia-vscode/Salsa.jl) as the core underlying design for the LS. There is an awesome JuliaCon video about that package from a couple of years ago for anyone curious. So that whole design is essentially inspired by the Rust language server. The outcome of that transition will be a much, much easier to reason about data model. ### Goal -Very roughly, StaticLint/CSTParser/SymbolServer has all the code pre these transitions, and JuliaWorkspaces has the code that is in this new world of the two transitions I mentioned above. So the division is by generation of when stuff was added to the LS, not by functionality. My expectation is that once the transition is finished, StaticLint and SymbolServer will be no more as individual packages but their code will have been incorporated into JuliaWorkspaces. The final design I have in mind is that the [LanguageServer.jl](https://github.com/julia-vscode/LanguageServer.jl) package really only has the code that implements the LSP wire protocol, but not much functionality in it, and all the functionality lives in JuliaWorkspaces. The idea being that we can then create for example CI tools that use the functionality in JuliaWorkspaces directly (like GitHub - julia-actions/julia-lint), or command line apps etc. +Very roughly, [StaticLint](https://github.com/julia-vscode/StaticLint.jl)/CSTParser/[SymbolServer](https://github.com/julia-vscode/SymbolServer.jl) has all the code pre these transitions, and JuliaWorkspaces has the code that is in this new world of the two transitions I mentioned above. So the division is by generation of when stuff was added to the LS, not by functionality. My expectation is that once the transition is finished, StaticLint and SymbolServer will be no more as individual packages but their code will have been incorporated into JuliaWorkspaces. The final design I have in mind is that the [LanguageServer.jl](https://github.com/julia-vscode/LanguageServer.jl) package really only has the code that implements the LSP wire protocol, but not much functionality in it, and all the functionality lives in JuliaWorkspaces. The idea being that we can then create for example CI tools that use the functionality in JuliaWorkspaces directly (like GitHub - julia-actions/julia-lint), or command line apps etc. ### Help wanted While the refactoring of the code - a least in the beginning - should be done by the core team, help to improve From 191caf07f81ae0620c67e65f997be56e8d7c22b4 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Sat, 21 Dec 2024 11:38:30 +0100 Subject: [PATCH 06/12] add package diagram --- docs/src/julia-vscode.png | Bin 0 -> 23088 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/src/julia-vscode.png diff --git a/docs/src/julia-vscode.png b/docs/src/julia-vscode.png new file mode 100644 index 0000000000000000000000000000000000000000..225a13567271c391b46b5334d569082c304ab255 GIT binary patch literal 23088 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 literal 0 HcmV?d00001 From 8869cd58a85e5f4316f15406267677974fbb6894 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Sat, 21 Dec 2024 11:45:17 +0100 Subject: [PATCH 07/12] add diagram --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 27b01f9..d66691f 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ # JuliaWorkspaces.jl Underlying engine for [LanguageServer.jl](https://github.com/julia-vscode/LanguageServer.jl) (LS), an implementation of the Microsoft Language Server Protocol for the Julia language. +This is the current set of packages used by julia-vscode. After the ongoing refactoring only the packages in green will be used. +

## Design ideas From 3c66f75ed3e8c2f44d96396bdf4057360c3a48d9 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Sat, 21 Dec 2024 11:51:21 +0100 Subject: [PATCH 08/12] Fix link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d66691f..34da429 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Underlying engine for [LanguageServer.jl](https://github.com/julia-vscode/LanguageServer.jl) (LS), an implementation of the Microsoft Language Server Protocol for the Julia language. This is the current set of packages used by julia-vscode. After the ongoing refactoring only the packages in green will be used. -

+

## Design ideas From b84d7b144ff0d4f6e73b852bdba15e598c1028cc Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Sat, 21 Dec 2024 11:54:07 +0100 Subject: [PATCH 09/12] fix CI button --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 34da429..360131b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ [![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://julia-vscode.github.io/JuliaWorkspaces.jl/dev) -[![Build Status](https://github.com/julia-vscode/JuliaWorkspaces.jl/actions/workflows/jlpkgbutler-ci-master-workflow.yml/badge.svg?branch=main)](https://github.com/julia-vscode/JuliaWorkspaces.jl/actions/workflows/jlpkgbutler-ci-master-workflow.yml) +[![Build Status](https://github.com/julia-vscode/JuliaWorkspaces.jl/actions/workflows/juliaci.yml/badge.svg?branch=main)](https://github.com/julia-vscode/JuliaWorkspaces.jl/actions/workflows/juliaci.yml) # JuliaWorkspaces.jl From 0d623f55ae9827907cbe16f2fce135c2dd1a3870 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Sat, 21 Dec 2024 12:05:03 +0100 Subject: [PATCH 10/12] update index.md --- docs/src/index.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/src/index.md b/docs/src/index.md index a05fd06..e36ab3c 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -1,14 +1,20 @@ # JuliaWorkspaces.jl -Underlying engine for LanguageServer.jl +Underlying engine for [LanguageServer.jl](https://github.com/julia-vscode/LanguageServer.jl) (LS), an implementation of the Microsoft Language Server Protocol for the Julia language. +This is the current set of packages used by julia-vscode. After the ongoing refactoring only the packages in green will be used. + +![julia-vscode](julia-vscode.png) ## Design ideas ### Planned transitions -The first transition is that we want to adopt JuliaSyntax.jl for parsing and probably also its node types for representing code. Most of the LS at the moment is powered by CSTParser, which has its own parsing implementation and brings the main node type along that is used throughout the LS. At the same time, we have started to use JuliaSyntax in the LS (yes, at the moment everything gets parsed twice, once by CSTParser and once by JuliaSyntax) for some things, namely the test item detection stuff. The roadmap here is that I want to completely get rid of the CSTParser parser and exclusively use the JuliaSyntax parser. The medium term plan is that we will have one parsing pass that then generates trees for the old CSTParser node types and the JuliaSyntax node types. Once we are at that stage we’ll need to spend some more time thinking about node types and what exactly is the right fit for the LS. +The first transition is that we want to adopt [JuliaSyntax.jl](https://github.com/JuliaLang/JuliaSyntax.jl) for parsing and probably also its node types for representing code. Most of the LS at the moment is powered by [CSTParser](https://github.com/julia-vscode/CSTParser.jl), which has its own parsing implementation and brings the main node type along that is used throughout the LS. At the same time, we have started to use JuliaSyntax in the LS (yes, at the moment everything gets parsed twice, once by CSTParser and once by JuliaSyntax) for some things, namely the test item detection stuff. The roadmap here is that I want to completely get rid of the CSTParser parser and exclusively use the JuliaSyntax parser. The medium term plan is that we will have one parsing pass that then generates trees for the old CSTParser node types and the JuliaSyntax node types. Once we are at that stage we’ll need to spend some more time thinking about node types and what exactly is the right fit for the LS. The second transition is towards a more functional/immutable/incremental computational model for most of the logic in the LS. At the moment the LS uses mutable data structures throughout, and keeping track of where state is mutated, and when is really, really tricky (well, at least for me). It also makes it completely hopeless that we might use multi threading at some point, for example. So this summer I started tackling that problem, and the strategy for that is that we use [Salsa.jl](https://github.com/julia-vscode/Salsa.jl) as the core underlying design for the LS. There is an awesome JuliaCon video about that package from a couple of years ago for anyone curious. So that whole design is essentially inspired by the Rust language server. The outcome of that transition will be a much, much easier to reason about data model. ### Goal -Very roughly, StaticLint/CSTParser/SymbolServer has all the code pre these transitions, and JuliaWorkspaces has the code that is in this new world of the two transitions I mentioned above. So the division is by generation of when stuff was added to the LS, not by functionality. My expectation is that once the transition is finished, StaticLint and SymbolServer will be no more as individual packages but their code will have been incorporated into JuliaWorkspaces. The final design I have in mind is that the [LanguageServer.jl](https://github.com/julia-vscode/LanguageServer.jl) package really only has the code that implements the LSP wire protocol, but not much functionality in it, and all the functionality lives in JuliaWorkspaces. The idea being that we can then create for example CI tools that use the functionality in JuliaWorkspaces directly (like GitHub - julia-actions/julia-lint), or command line apps etc. +Very roughly, [StaticLint](https://github.com/julia-vscode/StaticLint.jl)/CSTParser/[SymbolServer](https://github.com/julia-vscode/SymbolServer.jl) has all the code pre these transitions, and JuliaWorkspaces has the code that is in this new world of the two transitions I mentioned above. So the division is by generation of when stuff was added to the LS, not by functionality. My expectation is that once the transition is finished, StaticLint and SymbolServer will be no more as individual packages but their code will have been incorporated into JuliaWorkspaces. The final design I have in mind is that the [LanguageServer.jl](https://github.com/julia-vscode/LanguageServer.jl) package really only has the code that implements the LSP wire protocol, but not much functionality in it, and all the functionality lives in JuliaWorkspaces. The idea being that we can then create for example CI tools that use the functionality in JuliaWorkspaces directly (like GitHub - julia-actions/julia-lint), or command line apps etc. +### Help wanted +While the refactoring of the code - a least in the beginning - should be done by the core team, help to improve +related packages would be very welcome. For details, have a look at [#47](https://github.com/julia-vscode/JuliaWorkspaces.jl/issues/47). \ No newline at end of file From 1a5562e2f5a12859f37aef32ce4bd6c416406306 Mon Sep 17 00:00:00 2001 From: David Anthoff Date: Fri, 20 Dec 2024 14:22:55 -0800 Subject: [PATCH 11/12] Migrate CI to new solution --- .../workflows/jlpkgbutler-butler-workflow.yml | 22 ---------- .../jlpkgbutler-ci-master-workflow.yml | 43 ------------------- .../workflows/jlpkgbutler-ci-pr-workflow.yml | 39 ----------------- .../jlpkgbutler-codeformat-pr-workflow.yml | 23 ---------- .../jlpkgbutler-compathelper-workflow.yml | 20 --------- .../jlpkgbutler-docdeploy-workflow.yml | 23 ---------- .../workflows/jlpkgbutler-tagbot-workflow.yml | 17 -------- .github/workflows/juliaci.yml | 18 ++++++++ 8 files changed, 18 insertions(+), 187 deletions(-) delete mode 100644 .github/workflows/jlpkgbutler-butler-workflow.yml delete mode 100644 .github/workflows/jlpkgbutler-ci-master-workflow.yml delete mode 100644 .github/workflows/jlpkgbutler-ci-pr-workflow.yml delete mode 100644 .github/workflows/jlpkgbutler-codeformat-pr-workflow.yml delete mode 100644 .github/workflows/jlpkgbutler-compathelper-workflow.yml delete mode 100644 .github/workflows/jlpkgbutler-docdeploy-workflow.yml delete mode 100644 .github/workflows/jlpkgbutler-tagbot-workflow.yml create mode 100644 .github/workflows/juliaci.yml diff --git a/.github/workflows/jlpkgbutler-butler-workflow.yml b/.github/workflows/jlpkgbutler-butler-workflow.yml deleted file mode 100644 index 68c61c9..0000000 --- a/.github/workflows/jlpkgbutler-butler-workflow.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Run the Julia Package Butler - -on: - push: - branches: - - main - - master - schedule: - - cron: '0 */1 * * *' - workflow_dispatch: - -jobs: - butler: - name: "Run Package Butler" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: davidanthoff/julia-pkgbutler@releases/v1 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - ssh-private-key: ${{ secrets.JLPKGBUTLER_TOKEN }} - channel: stable diff --git a/.github/workflows/jlpkgbutler-ci-master-workflow.yml b/.github/workflows/jlpkgbutler-ci-master-workflow.yml deleted file mode 100644 index 94078ff..0000000 --- a/.github/workflows/jlpkgbutler-ci-master-workflow.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Run CI on main - -on: - push: - branches: - - main - - master - workflow_dispatch: - -jobs: - test: - runs-on: ${{ matrix.os }} - strategy: - matrix: - julia-version: ['1.10', '1.11'] - julia-arch: [x64, x86] - os: [ubuntu-latest, windows-latest, macos-13] - exclude: - - os: macos-13 - julia-arch: x86 - - os: macos-13 - julia-version: "1.4" - - steps: - - uses: actions/checkout@v4 - - uses: julia-actions/setup-julia@v2 - with: - version: ${{ matrix.julia-version }} - arch: ${{ matrix.julia-arch }} - - uses: julia-actions/cache@v2 - - uses: julia-actions/julia-buildpkg@v1 - env: - PYTHON: "" - - uses: julia-actions/julia-runtest@v1 - env: - PYTHON: "" - - uses: julia-actions/julia-processcoverage@v1 - - uses: codecov/codecov-action@v4 - with: - files: ./lcov.info - flags: unittests - token: ${{ secrets.CODECOV_TOKEN }} - \ No newline at end of file diff --git a/.github/workflows/jlpkgbutler-ci-pr-workflow.yml b/.github/workflows/jlpkgbutler-ci-pr-workflow.yml deleted file mode 100644 index 8301059..0000000 --- a/.github/workflows/jlpkgbutler-ci-pr-workflow.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Run CI on PR - -on: - pull_request: - types: [opened, synchronize, reopened] - -jobs: - test: - runs-on: ${{ matrix.os }} - strategy: - matrix: - julia-version: ['1.10', '1.11'] - julia-arch: [x64, x86] - os: [ubuntu-latest, windows-latest, macos-13] - exclude: - - os: macos-13 - julia-arch: x86 - - os: macos-13 - julia-version: "1.4" - - steps: - - uses: actions/checkout@v4 - - uses: julia-actions/setup-julia@v2 - with: - version: ${{ matrix.julia-version }} - arch: ${{ matrix.julia-arch }} - - uses: julia-actions/cache@v2 - - uses: julia-actions/julia-buildpkg@v1 - env: - PYTHON: "" - - uses: julia-actions/julia-runtest@v1 - env: - PYTHON: "" - - uses: julia-actions/julia-processcoverage@v1 - - uses: codecov/codecov-action@v4 - with: - files: ./lcov.info - flags: unittests - token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/jlpkgbutler-codeformat-pr-workflow.yml b/.github/workflows/jlpkgbutler-codeformat-pr-workflow.yml deleted file mode 100644 index d99a8e0..0000000 --- a/.github/workflows/jlpkgbutler-codeformat-pr-workflow.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Code Formatting - -on: - push: - branches: - - main - - master - workflow_dispatch: - -jobs: - format: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: julia-actions/julia-codeformat@releases/v1 - - name: Create Pull Request - uses: peter-evans/create-pull-request@v6 - with: - token: ${{ secrets.GITHUB_TOKEN }} - commit-message: Format files using DocumentFormat - title: '[AUTO] Format files using DocumentFormat' - body: '[DocumentFormat.jl](https://github.com/julia-vscode/DocumentFormat.jl) would suggest these formatting changes' - labels: no changelog diff --git a/.github/workflows/jlpkgbutler-compathelper-workflow.yml b/.github/workflows/jlpkgbutler-compathelper-workflow.yml deleted file mode 100644 index b315831..0000000 --- a/.github/workflows/jlpkgbutler-compathelper-workflow.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Run CompatHelper - -on: - schedule: - - cron: '00 * * * *' - issues: - types: [opened, reopened] - workflow_dispatch: - -jobs: - CompatHelper: - name: "Run CompatHelper.jl" - runs-on: ubuntu-latest - steps: - - name: Pkg.add("CompatHelper") - run: julia -e 'using Pkg; Pkg.add("CompatHelper")' - - name: CompatHelper.main() - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: julia -e 'using CompatHelper; CompatHelper.main()' diff --git a/.github/workflows/jlpkgbutler-docdeploy-workflow.yml b/.github/workflows/jlpkgbutler-docdeploy-workflow.yml deleted file mode 100644 index 6656d97..0000000 --- a/.github/workflows/jlpkgbutler-docdeploy-workflow.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Deploy documentation - -on: - push: - branches: - - main - - master - tags: - - v* - workflow_dispatch: - -jobs: - docdeploy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: julia-actions/julia-buildpkg@v1 - env: - PYTHON: "" - - uses: julia-actions/julia-docdeploy@latest - env: - DOCUMENTER_KEY: ${{ secrets.JLPKGBUTLER_TOKEN }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/jlpkgbutler-tagbot-workflow.yml b/.github/workflows/jlpkgbutler-tagbot-workflow.yml deleted file mode 100644 index d3ca956..0000000 --- a/.github/workflows/jlpkgbutler-tagbot-workflow.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: TagBot -on: - issue_comment: - types: - - created - workflow_dispatch: - -jobs: - TagBot: - if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot' - runs-on: ubuntu-latest - steps: - - uses: JuliaRegistries/TagBot@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - ssh: ${{ secrets.JLPKGBUTLER_TOKEN }} - branches: true diff --git a/.github/workflows/juliaci.yml b/.github/workflows/juliaci.yml new file mode 100644 index 0000000..fb6340c --- /dev/null +++ b/.github/workflows/juliaci.yml @@ -0,0 +1,18 @@ +name: Julia CI + +on: + push: {branches: [main,master]} + pull_request: {types: [opened,synchronize,reopened]} + issue_comment: {types: [created]} + schedule: [{cron: '0 0 * * *'}] + workflow_dispatch: {inputs: {feature: {type: choice, description: What to run, options: [CompatHelper,DocDeploy,LintAndTest,TagBot]}}} + +jobs: + julia-ci: + uses: julia-vscode/testitem-workflow/.github/workflows/juliaci.yml@v1 + with: + include-all-compatible-minor-versions: true + include-rc-versions: true + permissions: write-all + secrets: + codecov_token: ${{ secrets.CODECOV_TOKEN }} From 4c2a16ece09592ba1dee049233be0b7af4989759 Mon Sep 17 00:00:00 2001 From: David Anthoff Date: Fri, 20 Dec 2024 14:33:43 -0800 Subject: [PATCH 12/12] Exclude syntax error for linter in test data folder --- test/data/.JuliaLint.toml | 1 + 1 file changed, 1 insertion(+) create mode 100644 test/data/.JuliaLint.toml diff --git a/test/data/.JuliaLint.toml b/test/data/.JuliaLint.toml new file mode 100644 index 0000000..62ec7de --- /dev/null +++ b/test/data/.JuliaLint.toml @@ -0,0 +1 @@ +syntax-errors = false