chunked_publish_ts #134
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: Publish tree-sitter parsers | |
on: | |
repository_dispatch: | |
types: [chunked_publish_ts] | |
jobs: | |
publish: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
max-parallel: 10 # Don't DDOS the luarocks servers | |
matrix: | |
parsers: ${{ github.event.client_payload.parsers }} | |
steps: | |
- name: Clone parser repository | |
run: | | |
REPO_URL=$(echo "${{ matrix.parsers.install_info.url }}" | sed 's/\.git$//') | |
echo "REPO_URL=$REPO_URL" >> $GITHUB_ENV | |
git clone "$REPO_URL.git" . | |
- name: Get repo and parser metadata | |
id: get-release | |
run: | | |
echo "PARSER_NAME=tree-sitter-${{ matrix.parsers.lang }}" >> $GITHUB_ENV | |
echo "GITHUB_REPOSITORY_OVERRIDE=$(echo '${{ env.REPO_URL }}' | awk -F/ '{print $4"/"$5}')" >> $GITHUB_ENV | |
- name: Install tree-sitter CLI | |
uses: baptiste0928/cargo-install@v3 | |
if: ${{ matrix.parsers.install_info.requires_generate_from_grammar }} | |
with: | |
crate: tree-sitter-cli | |
- uses: actions/setup-node@v4 | |
if: ${{ matrix.parsers.install_info.requires_generate_from_grammar }} | |
- name: Install Lua | |
uses: leso-kn/gh-actions-lua@master | |
with: | |
luaVersion: "5.1" | |
- name: Install Luarocks | |
uses: hishamhm/gh-actions-luarocks@master | |
- name: Get Rockspec template | |
uses: actions/checkout@v4 | |
with: | |
sparse-checkout: | | |
resources | |
path: rockspec-template | |
- name: Prepare queries patch | |
run: | | |
git clone --branch main "https://github.com/nvim-treesitter/nvim-treesitter.git" nvim-treesitter | |
pushd nvim-treesitter | |
PARSER_REVISION=$(jq -r ".\"${{ matrix.parsers.lang }}\".revision" lockfile.json) | |
echo "GITHUB_SHA_OVERRIDE=$PARSER_REVISION" >> $GITHUB_ENV | |
popd | |
# git checkout "$PARSER_REVISION" | |
# mkdir -p _nvim/queries | |
# cp -r "nvim-treesitter/runtime/queries/${{ matrix.parsers.lang }}" _nvim/queries/ | |
# mkdir -p _parser | |
# mv queries _parser/ || echo "No existing queries directory" | |
# echo "creating queries patch" | |
# diff -Naur _parser _nvim > queries.patch || true | |
# echo "done" | |
- name: Prepare Rockspec template | |
env: | |
SOURCES_JSON: ${{ toJson(matrix.parsers.install_info.files) }} | |
run: | | |
mv rockspec-template/resources/tree-sitter-parser-rockspec.template rockspec.template | |
rm -r rockspec-template | |
sed -i 's/LANG/${{ matrix.parsers.lang }}/g' rockspec.template | |
# Convert sources to lua | |
SOURCES_TBL=$(echo "$SOURCES_JSON" | jq -r '"{ " + (map("\"" + . + "\"") | join(", ")) + " }"') | |
sed -i 's@SOURCES@'"$SOURCES_TBL"'@' rockspec.template | |
if [[ "${{ matrix.parsers.install_info.requires_generate_from_grammar }}" == "true" ]]; | |
then | |
sed -i 's/generate_from_grammar\s=\sfalse/generate_from_grammar = true/g' rockspec.template | |
fi | |
if [[ "${{ matrix.parsers.install_info.generate_requires_npm }}" == "true" ]]; | |
then | |
sed -i 's/generate_requires_npm\s=\sfalse/generate_requires_npm = true/g' rockspec.template | |
fi | |
if [[ -n "${{ matrix.parsers.install_info.location }}" ]]; | |
then | |
sed -i 's@location\s=\snil@location = "${{ matrix.parsers.install_info.location }}"@g' rockspec.template | |
fi | |
# sed -i -e '/QUERIES_PATCH_CONTENT/ {' -e 'r queries.patch' -e 'd' -e '}' rockspec.template | |
cat rockspec.template | |
- name: Install `luarocks-build-treesitter-parser` Package | |
run: | | |
luarocks --verbose --local --lua-version=5.1 install luarocks-build-treesitter-parser | |
- name: Install askalono-cli for license detection | |
uses: baptiste0928/cargo-install@v3 | |
with: | |
crate: askalono-cli | |
- name: Get SPDX license | |
run: | | |
LICENSE=$(askalono crawl . | sed -n 's/License: \([^ ]*\).*/\1/p' || echo "UNKNOWN") | |
LICENSE_COUNT=$(echo "$LICENSE" | grep -c .) | |
if [ "$LICENSE_COUNT" -eq 1 ]; then | |
echo "License: $LICENSE" | |
else | |
if [ "$LICENSE_COUNT" -eq 0 ]; then | |
echo "WARNING: No license identified." | |
else | |
echo "WARNING: Multiple licenses identified." | |
fi | |
LICENSE="UNKNOWN" | |
fi | |
echo "LICENSE=$LICENSE" >> $GITHUB_ENV | |
- name: Publish LuaRock (dev) | |
uses: nvim-neorocks/luarocks-tag-release@v5 | |
env: | |
LUAROCKS_API_KEY: ${{ secrets.LUAROCKS_API_KEY }} | |
with: | |
name: ${{ env.PARSER_NAME }} | |
version: 'scm' | |
summary: tree-sitter parser for ${{ matrix.parsers.lang }} | |
template: "rockspec.template" | |
license: ${{ env.LICENSE }} | |
labels: | | |
neovim | |
tree-sitter | |
extra_luarocks_args: | | |
--namespace=neorocks | |
--force | |
# - name: Publish LuaRock (release) | |
# uses: nvim-neorocks/luarocks-tag-release@v5 | |
# if: ${{ env.RELEASE_VERSION != '' }} | |
# env: | |
# LUAROCKS_API_KEY: ${{ secrets.LUAROCKS_API_KEY }} | |
# with: | |
# name: ${{ env.PARSER_NAME }} | |
# version: ${{ env.RELEASE_VERSION }} | |
# summary: tree-sitter parser for ${{ matrix.parsers.lang }} | |
# template: "rockspec.template" | |
# license: ${{ env.LICENSE }} | |
# labels: | | |
# neovim | |
# tree-sitter | |
# extra_luarocks_args: | | |
# --namespace=neorocks | |
# --force | |
# | |
# - name: Remove generated rockspec | |
# if: always() | |
# run: | | |
# rm "${{ env.PARSER_NAME }}-${{ env.RELEASE_VERSION }}-1.rockspec" \ | |
# || echo "Nothing to remove." | |
# |