Skip to content

chunked_publish_ts #119

chunked_publish_ts

chunked_publish_ts #119

---
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."
#