diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0034e17 --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +/bash-language-server-1.17.0-vendor.tar.xz +/bash-language-server-1.17.0.tar.gz +/bash-language-server-2.0.0.tar.gz +/bash-language-server-2.0.0-vendor.tar.xz +/bash-language-server-3.0.5.tar.gz +/bash-language-server-3.0.5-vendor.tar.xz +/bash-language-server-3.2.0.tar.gz +/bash-language-server-3.2.0-vendor.tar.xz +/bash-language-server-4.6.1.tar.gz +/bash-language-server-4.6.1-vendor.tar.xz +/bash-language-server-4.10.0-vendor.tar.xz +/bash-language-server-4.10.0.tar.gz +/bash-language-server-5.1.1.tar.gz +/bash-language-server-5.1.1-vendor.tar.zst +/bash-language-server-5.2.0.tar.gz +/bash-language-server-5.2.0-vendor.tar.zst +/bash-language-server-5.4.0.tar.gz +/bash-language-server-5.4.0-vendor.tar.zst +/bash-language-server-5.4.3.tar.gz +/bash-language-server-5.4.3-vendor.tar.zst +/bash-language-server-5.6.0.tar.gz +/bash-language-server-5.6.0-vendor.tar.zst diff --git a/README.md b/README.md index 94fec53..5eccb72 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ # nodejs-bash-language-server The nodejs-bash-language-server package + +## Updating the package + +* Update the version in the spec file +* Run `bash prepare_vendor.sh` (This will download the tarball and create the + vendor package) +* Add a changelog entry to the spec file +* Upload new source tarballs with `fedpkg new-sources PACKAGE.tar.gz` +* Commit your stuff to git diff --git a/bash-language-server-bundled-licenses.txt b/bash-language-server-bundled-licenses.txt new file mode 100644 index 0000000..10776d2 --- /dev/null +++ b/bash-language-server-bundled-licenses.txt @@ -0,0 +1,3 @@ +"BSD-2-Clause" +"ISC" +"MIT" diff --git a/changelog b/changelog new file mode 100644 index 0000000..b09f9ab --- /dev/null +++ b/changelog @@ -0,0 +1,52 @@ +* Thu Jan 25 2024 Fedora Release Engineering - 5.1.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sun Jan 21 2024 Fedora Release Engineering - 5.1.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Tue Jan 02 2024 Andreas Schneider - 5.1.1-1 +- Update to version 5.1.1 + * https://github.com/bash-lsp/bash-language-server/blob/server-5.1.1/server/CHANGELOG.md + +* Thu Jul 20 2023 Fedora Release Engineering - 4.10.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Mon Jun 12 2023 Pavel Filipenský - 4.6.10-1 +- Update to version 4.10.0 - https://github.com/bash-lsp/bash-language-server/blob/server-4.10.0/server/CHANGELOG.md + +* Thu Feb 02 2023 Pavel Filipenský - 4.6.1-2 +- Fix /usr/bin/bash-language-server + +* Mon Jan 30 2023 Pavel Filipenský - 4.6.1-1 +- Update to version 4.6.1 + * https://github.com/bash-lsp/bash-language-server/blob/server-4.6.1/server/CHANGELOG.md + +* Sun Jan 29 2023 Jonathan Lebon - 3.2.0-3 +- Don't own /usr/lib/node_modules + +* Thu Jan 19 2023 Fedora Release Engineering - 3.2.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Fri Aug 19 2022 Pavel Filipenský - 3.0.5-1 +- Update to version 3.0.5 + * https://github.com/bash-lsp/bash-language-server/blob/server-3.0.5/server/CHANGELOG.md +- Linting based on shellcheck +- Update bashls-fix-CVE-2022-0613.patch with content of https://patch-diff.githubusercontent.com/raw/bash-lsp/bash-language-server/pull/489.patch + +* Fri Jul 22 2022 Fedora Release Engineering - 2.0.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Feb 17 2022 Pavel Filipenský - 2.0.0-3 +- resolves: #2055544 - Fix CVE-2022-0613 + +* Thu Jan 20 2022 Fedora Release Engineering - 2.0.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Thu Aug 26 2021 Pavel Filipenský - 2.0.0-1 +- Update to version 2.0.0 + * https://github.com/bash-lsp/bash-language-server/blob/server-2.0.0/server/CHANGELOG.md +- Fixed indentation for node shebang loop + +* Thu Aug 05 2021 Andreas Schneider - 1.17.0-1 +- Initial package + diff --git a/nodejs-bash-language-server.spec b/nodejs-bash-language-server.spec new file mode 100644 index 0000000..67f9f5d --- /dev/null +++ b/nodejs-bash-language-server.spec @@ -0,0 +1,103 @@ +%{?nodejs_default_filter} + +%define pkg_name bash-language-server + +Name: nodejs-bash-language-server +Version: 5.6.0 +Release: %autorelease +Summary: A language server for Bash +License: MIT +Url: https://github.com/bash-lsp/bash-language-server +Source0: %{url}/archive/server-%{version}/%{pkg_name}-%{version}.tar.gz +# Create with `bash prepare_vendor.sh` +Source1: %{pkg_name}-%{version}-vendor.tar.zst +# Create with: nodejs-packaging-bundler bash-language-server 5.1.1 +Source2: bash-language-server-bundled-licenses.txt +BuildRequires: fdupes +BuildRequires: npm(typescript) +BuildRequires: nodejs-packaging +BuildRequires: nodejs-npm +BuildRequires: perl-interpreter +BuildRequires: pnpm +BuildArch: noarch +ExclusiveArch: %{nodejs_arches} noarch +Recommends: ShellCheck + +%description +Bash language server implementation based on Tree Sitter and its grammar for +Bash with explainshell integration. + +%prep +%autosetup -n %{pkg_name}-server-%{version} -a1 -p1 + +cp %{SOURCE2} . + +%build +pnpm install --offline --frozen-lockfile --store-dir="$(pwd)/.pnpm-store" + +npm run compile + +%install +# Only install production dependencies in node_modules +rm -rf node_modules/ +pnpm install --production --offline --frozen-lockfile --package-import-method copy --store-dir="$(pwd)/.pnpm-store" + +for S in $(grep -l '#!.*node' \ + server/out/cli.js \ + server/node_modules/ajv/scripts/* \ + server/node_modules/escodegen/bin/* \ + server/node_modules/esprima/bin/* \ + server/node_modules/performance-now/test/scripts/* \ + server/node_modules/pn/scripts/* \ + server/node_modules/sshpk/bin/* \ + server/node_modules/uuid/bin/* \ + server/node_modules/vscode-languageserver/bin/* \ + ) ; do + SB="${S}.backup" + cp ${S} ${SB} + perl -p -i -e 's|#!/usr/bin/env node|#!%{_bindir}/node|g' $S + diff -urN ${SB} ${S} || : + rm ${SB} +done + +install -d -m 0755 %{buildroot}%{nodejs_sitelib}/%{pkg_name}/ + +cp -av server %{buildroot}%{nodejs_sitelib}/%{pkg_name}/ +cp -av node_modules %{buildroot}%{nodejs_sitelib}/%{pkg_name}/ + +install -d -m 0755 %{buildroot}%{_bindir} +cat << EOF > %{buildroot}%{_bindir}/%{pkg_name} +#!/bin/sh +export NODE_ENV=production + +exec /usr/bin/node %{nodejs_sitelib}/%{pkg_name}/server/out/cli.js "\$@" +EOF +chmod +x %{buildroot}%{_bindir}/%{pkg_name} + +find %{buildroot}%{nodejs_sitelib}/%{pkg_name} -name "*.bak" -delete +find %{buildroot}%{nodejs_sitelib}/%{pkg_name} -type f -name "\.*" -delete +find %{buildroot}%{nodejs_sitelib}/%{pkg_name} -type d -name "\.bin" -print0 | xargs -0 rm -rf +find %{buildroot}%{nodejs_sitelib}/%{pkg_name} -type d -name "\.github" -print0 | xargs -0 rm -rf + +rm -rf %{buildroot}%{nodejs_sitelib}/%{pkg_name}/server/node_modules/ajv/scripts/ +rm -rf %{buildroot}%{nodejs_sitelib}/%{pkg_name}/server/node_modules/dashdash/etc/ +rm -rf %{buildroot}%{nodejs_sitelib}/%{pkg_name}/server/node_modules/performance-now/test/ + +rm %{buildroot}%{nodejs_sitelib}/%{pkg_name}/server/src/get-options.sh + +# dangling symlinks +rm %{buildroot}%{nodejs_sitelib}/%{pkg_name}/server/node_modules/@types/fuzzy-search +rm %{buildroot}%{nodejs_sitelib}/%{pkg_name}/server/node_modules/@types/node-fetch +rm %{buildroot}%{nodejs_sitelib}/%{pkg_name}/server/node_modules/@types/turndown +rm %{buildroot}%{nodejs_sitelib}/%{pkg_name}/server/node_modules/@types/urijs + +%fdupes %{buildroot}%{nodejs_sitelib}/%{pkg_name} + +%files +%license LICENSE bash-language-server-bundled-licenses.txt +%doc README.md +%{_bindir}/%{pkg_name} +%{nodejs_sitelib}/%{pkg_name}/ + +%changelog +%autochangelog diff --git a/prepare_vendor.sh b/prepare_vendor.sh new file mode 100644 index 0000000..4795776 --- /dev/null +++ b/prepare_vendor.sh @@ -0,0 +1,85 @@ +#!/bin/bash +# shellcheck disable=2181 + +BASHLS_URL="$(rpmspec -P ./*.spec | grep Source0 | sed -e 's/Source0:[ ]*//g')" +BASHLS_TARBALL="$(basename "${BASHLS_URL}")" +BASHLS_PKGVERSION="$(rpmspec -P ./*.spec | grep ^Version | sed -e 's/Version:[ ]*//g')" +BASHLS_PKGNAME="bash-language-server" +BASHLS_PKGDIR="$(pwd)" +BASHLS_TMPDIR="$(mktemp --tmpdir -d bashls-XXXXXXXX)" +BASHLS_PATH="${BASHLS_TMPDIR}/${BASHLS_PKGNAME}-server-${BASHLS_PKGVERSION}" + +echo "URL: ${BASHLS_URL}" +echo "TARBALL: ${BASHLS_TARBALL}" +echo "NAME: ${BASHLS_PKGNAME}" +echo "VERSION: ${BASHLS_PKGVERSION}" +echo "PATH: ${BASHLS_PATH}" + +cleanup_tmpdir() { + popd 2>/dev/null || true + rm -rf "${BASHLS_TMPDIR}" +} +trap cleanup_tmpdir SIGINT + +cleanup_and_exit() { + cleanup_tmpdir + if test "$1" = 0 -o -z "$1" ; then + exit 0 + else + exit "${1}" + fi +} + +if [ ! -w "${BASHLS_TARBALL}" ]; then + wget "$BASHLS_URL" +fi + + +tar -xf "${BASHLS_TARBALL}" -C "${BASHLS_TMPDIR}" + + +pushd "${BASHLS_PATH}" || cleanup_and_exit 1 + +PNPM_STORE_DIR="$(pwd)/.pnpm-store" +echo ">>>>>> Install npm modules" +pnpm install --store-dir="${PNPM_STORE_DIR}" +if [ $? -ne 0 ]; then + echo "ERROR: yarn install failed" + cleanup_and_exit 1 +fi + +echo ">>>>>> Cleanup object dirs" +find "${PNPM_STORE_DIR}/" -type d -name "__pycache__" -print0 | xargs -0 rm -rf +find "${PNPM_STORE_DIR}/" -type d -name "*.o.d" -print0 | xargs -0 rm -rf + + +echo ">>>>>> Cleanup object files" +find "${PNPM_STORE_DIR}/" -name "*.node" -print0 | xargs -0 rm -rf + +find "${PNPM_STORE_DIR}/" -name "*.dll" | grep -v signal-client | xargs rm -f +find "${PNPM_STORE_DIR}/" -name "*.dylib" -delete +find "${PNPM_STORE_DIR}/" -name "*.so" -delete +find "${PNPM_STORE_DIR}/" -name "*.o" -delete +find "${PNPM_STORE_DIR}/" -name "*.a" -delete +find "${PNPM_STORE_DIR}/" -name "*.snyk-*.flag" -delete +find "${PNPM_STORE_DIR}/" -name "builderror.log" -delete +find "${PNPM_STORE_DIR}/" -name ".deps" -type d -print0 | xargs -0 rm -rf + + +echo ">>>>>> Cleanup build info" +find "${PNPM_STORE_DIR}/" -name "Makefile" -delete +find "${PNPM_STORE_DIR}/" -name "*.target.mk" -delete +find "${PNPM_STORE_DIR}/" -name "config.gypi" -delete +find "${PNPM_STORE_DIR}/" -name "package.json" -exec sed -i "s#${BASHLS_PATH}#/tmp#g" {} \; + + +echo ">>>>>> Package vendor files" +rm -f "${BASHLS_PKGDIR}/${BASHLS_PKGNAME}-${BASHLS_PKGVERSION}-vendor.tar.zst" +XZ_OPT="-T$(nproc)" tar --zstd -cf "${BASHLS_PKGDIR}/${BASHLS_PKGNAME}-${BASHLS_PKGVERSION}-vendor.tar.zst" .pnpm-store +if [ $? -ne 0 ]; then + cleanup_and_exit 1 +fi + +popd || cleanup_and_exit 1 + +cleanup_and_exit 0 diff --git a/sources b/sources new file mode 100644 index 0000000..86fe2b4 --- /dev/null +++ b/sources @@ -0,0 +1,2 @@ +SHA512 (bash-language-server-5.6.0.tar.gz) = 0c99d34ca0e92a4e5719e8c8ca99faad5effe5d6d45f72cdaa05f70df521cf0830e3f81acf700d172496afa721881c2f1df4faf280e897809ce55757d5039796 +SHA512 (bash-language-server-5.6.0-vendor.tar.zst) = ea90b1ea6fd23bbd18ff1346f3b22813a0c5a38c0f3c36b58dbebe64d2dd1f449ae9e1ea5ca516124d8a7bf7f327d2062cbf7fb17ccdf424489a29eb14a71560