aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-07-09 01:00:34 +0200
committerGitHub <noreply@github.com>2022-07-09 01:00:34 +0200
commitd132a7a673d43b2da73f75e09fbe7fb49c431514 (patch)
tree4b3b10d68ee149382d71b6977664bcb9d6dd2d20
parentfeat: add black (#34) (diff)
downloadmason-d132a7a673d43b2da73f75e09fbe7fb49c431514.tar
mason-d132a7a673d43b2da73f75e09fbe7fb49c431514.tar.gz
mason-d132a7a673d43b2da73f75e09fbe7fb49c431514.tar.bz2
mason-d132a7a673d43b2da73f75e09fbe7fb49c431514.tar.lz
mason-d132a7a673d43b2da73f75e09fbe7fb49c431514.tar.xz
mason-d132a7a673d43b2da73f75e09fbe7fb49c431514.tar.zst
mason-d132a7a673d43b2da73f75e09fbe7fb49c431514.zip
chore(workflow): modularize scripts and remove mason-lspconfig from CI checks (#36)
-rw-r--r--.github/workflows/autogenerate.yml (renamed from .github/workflows/run-autogen.yml)21
-rw-r--r--.github/workflows/check-generated-code-state.yml29
-rw-r--r--.github/workflows/metadata-diff.yml30
-rw-r--r--.github/workflows/stylua.yml1
-rw-r--r--Makefile15
-rw-r--r--lua/mason/mappings/language.lua2
-rw-r--r--scripts/autogen_metadata.lua150
-rwxr-xr-xscripts/autogen_metadata.sh12
-rw-r--r--scripts/lua/mason-scripts/mason-lspconfig/generate.lua39
-rw-r--r--scripts/lua/mason-scripts/mason-schemas/generate.lua63
-rw-r--r--scripts/lua/mason-scripts/mason/generate.lua49
-rw-r--r--scripts/lua/mason-scripts/utils.lua21
-rwxr-xr-xscripts/nvim.sh11
13 files changed, 237 insertions, 206 deletions
diff --git a/.github/workflows/run-autogen.yml b/.github/workflows/autogenerate.yml
index 1a97114f..3c596ca0 100644
--- a/.github/workflows/run-autogen.yml
+++ b/.github/workflows/autogenerate.yml
@@ -1,9 +1,9 @@
-name: Run autogen script
+name: Autogenerate code
on:
workflow_dispatch:
schedule:
- - cron: "15 13 * * *"
+ - cron: "0 10 * * *"
jobs:
run-autogen-script:
@@ -15,13 +15,8 @@ jobs:
neovim: true
version: v0.7.0
- - name: Clone dependencies
- run: |
- mkdir -p ~/.local/share/nvim/site/pack/packer/start
- git clone --depth 1 https://github.com/neovim/nvim-lspconfig ~/.local/share/nvim/site/pack/packer/start/nvim-lspconfig
-
- - name: Run autogen_metadata.sh script
- run: ./scripts/autogen_metadata.sh
+ - name: make autogenerate
+ run: make autogenerate
- name: Create Pull Request
id: cpr
@@ -30,13 +25,13 @@ jobs:
token: ${{ secrets.PAT }}
author: "William Botman <william+bot@redwill.se>"
committer: "William Botman <william+bot@redwill.se>"
- add-paths: lua/mason/_generated
- commit-message: run autogen_metadata.lua
- branch: chore/autogen_metadata
+ add-paths: lua/mason-lspconfig lua/mason-schemas
+ commit-message: "chore: update generated code"
+ branch: chore/autogenerate
branch-suffix: short-commit-hash
delete-branch: true
labels: automerge
- title: run autogen_metadata.lua
+ title: "chore: update generated code"
- name: Enable Pull Request Automerge
if: steps.cpr.outputs.pull-request-operation == 'created'
diff --git a/.github/workflows/check-generated-code-state.yml b/.github/workflows/check-generated-code-state.yml
new file mode 100644
index 00000000..e79e14fb
--- /dev/null
+++ b/.github/workflows/check-generated-code-state.yml
@@ -0,0 +1,29 @@
+name: Check generated code state
+
+on:
+ push:
+ branches:
+ - "alpha"
+ pull_request:
+
+jobs:
+ check:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: rhysd/action-setup-vim@v1
+ with:
+ neovim: true
+ version: v0.7.0
+
+ - name: make generate
+ run: make generate
+
+ - name: Ensure there are no diffs
+ run: |
+ git update-index -q --refresh
+ git diff
+ git diff-index --exit-code --quiet HEAD -- || {
+ echo '::error::Generated code is not up to date, run "make generate".';
+ exit 1;
+ }
diff --git a/.github/workflows/metadata-diff.yml b/.github/workflows/metadata-diff.yml
deleted file mode 100644
index ddc129ac..00000000
--- a/.github/workflows/metadata-diff.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-name: Metadata diff checker
-
-on:
- push:
- branches:
- - "main"
- pull_request:
-
-jobs:
- metadata-diff-check:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - uses: rhysd/action-setup-vim@v1
- with:
- neovim: true
- version: v0.7.0
-
- - name: Clone dependencies
- run: |
- mkdir -p ~/.local/share/nvim/site/pack/packer/start
- git clone --depth 1 https://github.com/neovim/nvim-lspconfig ~/.local/share/nvim/site/pack/packer/start/nvim-lspconfig
-
- - name: Run autogen_metadata.sh script
- run: ./scripts/autogen_metadata.sh
-
- - name: Ensure there are no diffs
- run: |
- git update-index --refresh
- git diff-index --quiet HEAD --
diff --git a/.github/workflows/stylua.yml b/.github/workflows/stylua.yml
index 1532fc6f..877795de 100644
--- a/.github/workflows/stylua.yml
+++ b/.github/workflows/stylua.yml
@@ -3,6 +3,7 @@ name: Stylua check
on:
push:
branches:
+ - "alpha"
pull_request:
jobs:
diff --git a/Makefile b/Makefile
index e27f90a1..5483a83e 100644
--- a/Makefile
+++ b/Makefile
@@ -20,4 +20,19 @@ clean: clean_fixtures clean_dependencies
test: clean_fixtures dependencies
INSTALL_ROOT_DIR=${INSTALL_ROOT_DIR} $(NVIM_HEADLESS) -c "call RunTests()"
+.PHONY: lspconfig-generate
+lspconfig-generate: dependencies
+ ./scripts/nvim.sh scripts/lua/mason-scripts/mason-lspconfig/generate.lua
+
+.PHONY: schemas-generate
+schemas-generate: dependencies
+ ./scripts/nvim.sh scripts/lua/mason-scripts/mason-schemas/generate.lua
+
+.PHONY: autogenerate
+autogenerate: schemas-generate lspconfig-generate
+
+.PHONY: generate
+generate: dependencies
+ ./scripts/nvim.sh scripts/lua/mason-scripts/mason/generate.lua
+
# vim:noexpandtab
diff --git a/lua/mason/mappings/language.lua b/lua/mason/mappings/language.lua
index b005d2da..af245d7f 100644
--- a/lua/mason/mappings/language.lua
+++ b/lua/mason/mappings/language.lua
@@ -70,7 +70,7 @@ return {
prisma = { "prisma-language-server" },
puppet = { "puppet-editor-services" },
purescript = { "purescript-language-server" },
- python = { "debugpy", "jedi-language-server", "pyright", "python-lsp-server", "sourcery" },
+ python = { "black", "debugpy", "jedi-language-server", "pyright", "python-lsp-server", "sourcery" },
r = { "r-languageserver" },
reason = { "reason-language-server" },
rescript = { "rescript-lsp" },
diff --git a/scripts/autogen_metadata.lua b/scripts/autogen_metadata.lua
deleted file mode 100644
index 736b1bcb..00000000
--- a/scripts/autogen_metadata.lua
+++ /dev/null
@@ -1,150 +0,0 @@
-local a = require "mason-core.async"
-local Path = require "mason-core.path"
-local fetch = require "mason-core.fetch"
-local _ = require "mason-core.functional"
-local fs = require "mason-core.fs"
-local registry = require "mason-registry"
-local lspconfig_server_mapping = require "mason-lspconfig.mappings.server"
-
----@async
----@param path string
----@param contents string
----@param flags string
-local function write_file(path, contents, flags)
- fs.async.write_file(
- path,
- table.concat({
- "-- THIS FILE IS GENERATED. DO NOT EDIT MANUALLY.",
- "-- stylua: ignore start",
- contents,
- }, "\n"),
- flags
- )
-end
-
-local function get_lspconfig(name)
- return require(("lspconfig.server_configurations.%s"):format(name))
-end
-
----@async
-local function create_lspconfig_filetype_map()
- local filetype_map = {}
-
- for _, server_name in ipairs(_.keys(lspconfig_server_mapping.lspconfig_to_package)) do
- local config = get_lspconfig(server_name)
- for _, filetype in ipairs(config.default_config.filetypes or {}) do
- if not filetype_map[filetype] then
- filetype_map[filetype] = {}
- end
- table.insert(filetype_map[filetype], server_name)
- table.sort(filetype_map[filetype])
- end
- end
-
- write_file(
- Path.concat { vim.loop.cwd(), "lua", "mason-lspconfig", "mappings", "filetype.lua" },
- "return " .. vim.inspect(filetype_map),
- "w"
- )
-end
-
----@async
-local function create_language_map()
- local language_map = {}
- local sorted_packages = _.sort_by(_.prop "name", registry.get_all_packages())
- _.each(function(pkg)
- _.each(function(language)
- local language_lc = language:lower()
- language_map[language_lc] = _.append(pkg.name, language_map[language_lc] or {})
- end, pkg.spec.languages)
- end, sorted_packages)
-
- write_file(
- Path.concat { vim.loop.cwd(), "lua", "mason", "mappings", "language.lua" },
- "return " .. vim.inspect(language_map),
- "w"
- )
-end
-
----@async
-local function create_lsp_setting_schema_files()
- local lsp_schemas_path = Path.concat {
- vim.loop.cwd(),
- "lua",
- "mason-schemas",
- "lsp",
- }
-
- for _, file in
- ipairs(vim.fn.glob(
- Path.concat {
- lsp_schemas_path,
- "*",
- },
- 1,
- 1
- ))
- do
- print("Deleting " .. file)
- vim.fn.delete(file)
- end
-
- local gist_data = fetch(
- "https://gist.githubusercontent.com/williamboman/a01c3ce1884d4b57cc93422e7eae7702/raw/lsp-packages.json"
- ):get_or_throw()
- local package_json_mappings = vim.json.decode(gist_data)
-
- for _, server_name in ipairs(_.keys(lspconfig_server_mapping.lspconfig_to_package)) do
- local package_json_url = package_json_mappings[server_name]
- if package_json_url then
- print(("Fetching %q..."):format(package_json_url))
- local response = fetch(package_json_url):get_or_throw()
- local schema = vim.json.decode(response)
- if schema.contributes and schema.contributes.configuration then
- schema = schema.contributes.configuration
- end
- if not schema.properties then
- -- Some servers (like dartls) seem to provide an array of configurations (for more than just LSP stuff)
- print(("Could not find appropriate schema structure for %s."):format(server_name))
- else
- write_file(
- Path.concat {
- lsp_schemas_path,
- ("%s.lua"):format(lspconfig_server_mapping.lspconfig_to_package[server_name]),
- },
- "return " .. vim.inspect(schema, { newline = "", indent = "" }),
- "w"
- )
- end
- end
- end
-end
-
----@async
-local function create_package_index()
- a.scheduler()
- local packages = {}
- local to_lua_path = _.compose(_.gsub("/", "."), _.gsub("^lua/", ""))
- for _, package_path in ipairs(vim.fn.glob("lua/mason-registry/*/init.lua", false, true)) do
- local package_filename = vim.fn.fnamemodify(package_path, ":h:t")
- local lua_path = to_lua_path(vim.fn.fnamemodify(package_path, ":h"))
- local pkg = require(lua_path)
- assert(package_filename == pkg.name, ("Package name is not the same as its module name %s"):format(lua_path))
- packages[pkg.name] = lua_path
- end
-
- write_file(
- Path.concat { vim.loop.cwd(), "lua", "mason-registry", "index.lua" },
- "return " .. vim.inspect(packages),
- "w"
- )
-end
-
-a.run_blocking(function()
- a.wait_all(_.filter(_.identity, {
- create_lspconfig_filetype_map,
- create_language_map,
- not vim.env.SKIP_SCHEMAS and create_lsp_setting_schema_files,
- create_package_index,
- }))
-end)
diff --git a/scripts/autogen_metadata.sh b/scripts/autogen_metadata.sh
deleted file mode 100755
index 5e1b6ceb..00000000
--- a/scripts/autogen_metadata.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env bash
-set -ex
-
-declare -x XDG_DATA_HOME="${XDG_DATA_HOME:-"$HOME/.local/share"}"
-declare -x NVIM_PACK_DIR="$XDG_DATA_HOME/nvim/site/pack"
-
-declare -x LSP_CONFIG_DIR="$NVIM_PACK_DIR/packer/start/nvim-lspconfig"
-declare -x MASON_DIR="$PWD"
-
-nvim -u NONE -E -R --headless \
- --cmd "set rtp+=${LSP_CONFIG_DIR},${MASON_DIR}" \
- +"luafile scripts/autogen_metadata.lua" +q
diff --git a/scripts/lua/mason-scripts/mason-lspconfig/generate.lua b/scripts/lua/mason-scripts/mason-lspconfig/generate.lua
new file mode 100644
index 00000000..2fa58692
--- /dev/null
+++ b/scripts/lua/mason-scripts/mason-lspconfig/generate.lua
@@ -0,0 +1,39 @@
+local a = require "mason-core.async"
+local path = require "mason-core.path"
+local _ = require "mason-core.functional"
+local lspconfig_server_mapping = require "mason-lspconfig.mappings.server"
+local script_utils = require "mason-scripts.utils"
+
+local MASON_LSPCONFIG_DIR = path.concat { vim.loop.cwd(), "lua", "mason-lspconfig" }
+
+local function get_lspconfig(name)
+ return require(("lspconfig.server_configurations.%s"):format(name))
+end
+
+---@async
+local function create_lspconfig_filetype_map()
+ local filetype_map = {}
+
+ for _, server_name in ipairs(_.keys(lspconfig_server_mapping.lspconfig_to_package)) do
+ local config = get_lspconfig(server_name)
+ for _, filetype in ipairs(config.default_config.filetypes or {}) do
+ if not filetype_map[filetype] then
+ filetype_map[filetype] = {}
+ end
+ table.insert(filetype_map[filetype], server_name)
+ table.sort(filetype_map[filetype])
+ end
+ end
+
+ script_utils.write_file(
+ path.concat { MASON_LSPCONFIG_DIR, "mappings", "filetype.lua" },
+ "return " .. vim.inspect(filetype_map),
+ "w"
+ )
+end
+
+a.run_blocking(function()
+ a.wait_all {
+ create_lspconfig_filetype_map,
+ }
+end)
diff --git a/scripts/lua/mason-scripts/mason-schemas/generate.lua b/scripts/lua/mason-scripts/mason-schemas/generate.lua
new file mode 100644
index 00000000..20793fcb
--- /dev/null
+++ b/scripts/lua/mason-scripts/mason-schemas/generate.lua
@@ -0,0 +1,63 @@
+local a = require "mason-core.async"
+local path = require "mason-core.path"
+local fetch = require "mason-core.fetch"
+local _ = require "mason-core.functional"
+local lspconfig_server_mapping = require "mason-lspconfig.mappings.server"
+local script_utils = require "mason-scripts.utils"
+
+local MASON_SCHEMAS_DIR = path.concat { vim.loop.cwd(), "lua", "mason-schemas" }
+
+---@async
+local function create_lsp_setting_schema_files()
+ local lsp_schemas_path = path.concat { MASON_SCHEMAS_DIR, "lsp" }
+
+ for _, file in
+ ipairs(vim.fn.glob(
+ path.concat {
+ lsp_schemas_path,
+ "*",
+ },
+ 1,
+ 1
+ ))
+ do
+ print("Deleting " .. file)
+ vim.fn.delete(file)
+ end
+
+ local gist_data = fetch(
+ "https://gist.githubusercontent.com/williamboman/a01c3ce1884d4b57cc93422e7eae7702/raw/lsp-packages.json"
+ ):get_or_throw()
+ local package_json_mappings = vim.json.decode(gist_data)
+
+ for _, server_name in ipairs(_.keys(lspconfig_server_mapping.lspconfig_to_package)) do
+ local package_json_url = package_json_mappings[server_name]
+ if package_json_url then
+ print(("Fetching %q..."):format(package_json_url))
+ local response = fetch(package_json_url):get_or_throw()
+ local schema = vim.json.decode(response)
+ if schema.contributes and schema.contributes.configuration then
+ schema = schema.contributes.configuration
+ end
+ if not schema.properties then
+ -- Some servers (like dartls) seem to provide an array of configurations (for more than just LSP stuff)
+ print(("Could not find appropriate schema structure for %s."):format(server_name))
+ else
+ script_utils.write_file(
+ path.concat {
+ lsp_schemas_path,
+ ("%s.lua"):format(lspconfig_server_mapping.lspconfig_to_package[server_name]),
+ },
+ "return " .. vim.inspect(schema, { newline = "", indent = "" }),
+ "w"
+ )
+ end
+ end
+ end
+end
+
+a.run_blocking(function()
+ a.wait_all {
+ create_lsp_setting_schema_files,
+ }
+end)
diff --git a/scripts/lua/mason-scripts/mason/generate.lua b/scripts/lua/mason-scripts/mason/generate.lua
new file mode 100644
index 00000000..5d02ab56
--- /dev/null
+++ b/scripts/lua/mason-scripts/mason/generate.lua
@@ -0,0 +1,49 @@
+local a = require "mason-core.async"
+local path = require "mason-core.path"
+local _ = require "mason-core.functional"
+local registry = require "mason-registry"
+local script_utils = require "mason-scripts.utils"
+
+local MASON_DIR = path.concat { vim.loop.cwd(), "lua", "mason" }
+local MASON_REGISTRY_DIR = path.concat { vim.loop.cwd(), "lua", "mason-registry" }
+
+---@async
+local function create_language_map()
+ local language_map = {}
+ local sorted_packages = _.sort_by(_.prop "name", registry.get_all_packages())
+ _.each(function(pkg)
+ _.each(function(language)
+ local language_lc = language:lower()
+ language_map[language_lc] = _.append(pkg.name, language_map[language_lc] or {})
+ end, pkg.spec.languages)
+ end, sorted_packages)
+
+ script_utils.write_file(
+ path.concat { MASON_DIR, "mappings", "language.lua" },
+ "return " .. vim.inspect(language_map),
+ "w"
+ )
+end
+
+---@async
+local function create_package_index()
+ a.scheduler()
+ local packages = {}
+ local to_lua_path = _.compose(_.gsub("/", "."), _.gsub("^lua/", ""))
+ for _, package_path in ipairs(vim.fn.glob("lua/mason-registry/*/init.lua", false, true)) do
+ local package_filename = vim.fn.fnamemodify(package_path, ":h:t")
+ local lua_path = to_lua_path(vim.fn.fnamemodify(package_path, ":h"))
+ local pkg = require(lua_path)
+ assert(package_filename == pkg.name, ("Package name is not the same as its module name %s"):format(lua_path))
+ packages[pkg.name] = lua_path
+ end
+
+ script_utils.write_file(path.concat { MASON_REGISTRY_DIR, "index.lua" }, "return " .. vim.inspect(packages), "w")
+end
+
+a.run_blocking(function()
+ a.wait_all {
+ create_language_map,
+ create_package_index,
+ }
+end)
diff --git a/scripts/lua/mason-scripts/utils.lua b/scripts/lua/mason-scripts/utils.lua
new file mode 100644
index 00000000..771d419a
--- /dev/null
+++ b/scripts/lua/mason-scripts/utils.lua
@@ -0,0 +1,21 @@
+local fs = require "mason-core.fs"
+
+local M = {}
+
+---@async
+---@param path string
+---@param contents string
+---@param flags string
+function M.write_file(path, contents, flags)
+ fs.async.write_file(
+ path,
+ table.concat({
+ "-- THIS FILE IS GENERATED. DO NOT EDIT MANUALLY.",
+ "-- stylua: ignore start",
+ contents,
+ }, "\n"),
+ flags
+ )
+end
+
+return M
diff --git a/scripts/nvim.sh b/scripts/nvim.sh
new file mode 100755
index 00000000..e2ac55cd
--- /dev/null
+++ b/scripts/nvim.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+set -exuo pipefail
+
+declare -x DEPENDENCIES="${PWD}/dependencies"
+declare -x MASON_DIR="$PWD"
+declare -x MASON_SCRIPT_DIR="${PWD}/scripts"
+
+nvim -u NONE -E -R --headless \
+ --cmd "set rtp+=${MASON_SCRIPT_DIR},${MASON_DIR},${DEPENDENCIES}" \
+ +"luafile $1" +q