diff options
-rw-r--r-- | .github/workflows/notes.md | 51 | ||||
-rw-r--r-- | .github/workflows/release.yml | 93 | ||||
-rw-r--r-- | BUILD.md | 2 | ||||
-rw-r--r-- | INSTALL.md | 21 | ||||
-rw-r--r-- | cmake.packaging/CMakeLists.txt | 2 | ||||
-rw-r--r-- | runtime/doc/support.txt | 4 | ||||
-rwxr-xr-x | scripts/genappimage.sh | 24 |
7 files changed, 134 insertions, 63 deletions
diff --git a/.github/workflows/notes.md b/.github/workflows/notes.md index 25f4a5fb32..ed792f8d85 100644 --- a/.github/workflows/notes.md +++ b/.github/workflows/notes.md @@ -34,25 +34,49 @@ Note: On Windows "Server" you may need to [install vcruntime140.dll](https://lea 3. Extract: `tar xzvf nvim-macos-arm64.tar.gz` 4. Run `./nvim-macos-arm64/bin/nvim` -### Linux (x64) +### Linux (x86_64) glibc 2.31 or newer is required. Or you may try the (unsupported) [builds for older glibc](https://github.com/neovim/neovim-releases). #### AppImage -1. Download **nvim.appimage** -2. Run `chmod u+x nvim.appimage && ./nvim.appimage` +1. Download **nvim-linux-x86_64.appimage** +2. Run `chmod u+x nvim-linux-x86_64.appimage && ./nvim-linux-x86_64.appimage` - If your system does not have FUSE you can [extract the appimage](https://github.com/AppImage/AppImageKit/wiki/FUSE#type-2-appimage): ``` - ./nvim.appimage --appimage-extract + ./nvim-linux-x86_64.appimage --appimage-extract ./squashfs-root/usr/bin/nvim ``` +> [!NOTE] +> This appimage is also published as `nvim.appimage` for backward compatibility, but scripts should be updated to use the new name. + #### Tarball -1. Download **nvim-linux64.tar.gz** -2. Extract: `tar xzvf nvim-linux64.tar.gz` -3. Run `./nvim-linux64/bin/nvim` +1. Download **nvim-linux-x86_64.tar.gz** +2. Extract: `tar xzvf nvim-linux-x86_64.tar.gz` +3. Run `./nvim-linux-x86_64/bin/nvim` + +> [!NOTE] +> This tarball is also published as `nvim-linux64.tar.gz` for backward compatibility, but scripts should be updated to use the new name. + +### Linux (arm64) + +#### AppImage + +1. Download **nvim-linux-arm64.appimage** +2. Run `chmod u+x nvim-linux-arm64.appimage && ./nvim-linux-arm64.appimage` + - If your system does not have FUSE you can [extract the appimage](https://github.com/AppImage/AppImageKit/wiki/FUSE#type-2-appimage): + ``` + ./nvim-linux-arm64.appimage --appimage-extract + ./squashfs-root/usr/bin/nvim + ``` + +#### Tarball + +1. Download **nvim-linux-arm64.tar.gz** +2. Extract: `tar xzvf nvim-linux-arm64.tar.gz` +3. Run `./nvim-linux-arm64/bin/nvim` ### Other @@ -61,11 +85,14 @@ glibc 2.31 or newer is required. Or you may try the (unsupported) [builds for ol ## SHA256 Checksums ``` -${SHA_LINUX_64_TAR} -${SHA_APP_IMAGE} -${SHA_APP_IMAGE_ZSYNC} -${SHA_MACOS_X86_64} +${SHA_APPIMAGE_ARM64} +${SHA_APPIMAGE_ARM64_ZSYNC} +${SHA_LINUX_ARM64_TAR} +${SHA_APPIMAGE_X86_64} +${SHA_APPIMAGE_X86_64_ZSYNC} +${SHA_LINUX_X86_64_TAR} ${SHA_MACOS_ARM64} -${SHA_WIN_64_ZIP} +${SHA_MACOS_X86_64} ${SHA_WIN_64_MSI} +${SHA_WIN_64_ZIP} ``` diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index de90a077ff..2062d58103 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -39,10 +39,21 @@ jobs: printf "appimage_tag=${APPIMAGE_TAG}\n" >> $GITHUB_OUTPUT linux: - runs-on: ubuntu-20.04 needs: setup + strategy: + fail-fast: false + matrix: + runner: [ ubuntu-20.04, ubuntu-24.04-arm ] + include: + - runner: ubuntu-20.04 + arch: x86_64 + cc: gcc-10 + - runner: ubuntu-24.04-arm + arch: aarch64 + runs-on: ${{ matrix.runner }} env: - CC: gcc-10 + CC: ${{ matrix.cc }} + LDAI_NO_APPSTREAM: 1 # skip checking (broken) AppStream metadata for issues outputs: version: ${{ steps.build.outputs.version }} steps: @@ -52,22 +63,25 @@ jobs: fetch-depth: 0 - run: ./.github/scripts/install_deps.sh - run: echo "CMAKE_BUILD_TYPE=${{ needs.setup.outputs.build_type }}" >> $GITHUB_ENV + - if: matrix.arch == 'aarch64' + run: sudo apt-get update && sudo apt-get install -y libfuse2t64 - name: appimage - run: ./scripts/genappimage.sh ${{ needs.setup.outputs.appimage_tag }} + run: | + ./scripts/genappimage.sh ${{ needs.setup.outputs.appimage_tag }} - name: tar.gz run: cpack --config build/CPackConfig.cmake -G TGZ - uses: actions/upload-artifact@v4 with: - name: appimage + name: appimage-${{ matrix.arch }} path: | - build/bin/nvim.appimage - build/bin/nvim.appimage.zsync + build/bin/nvim-linux-${{ matrix.arch }}.appimage + build/bin/nvim-linux-${{ matrix.arch }}.appimage.zsync retention-days: 1 - uses: actions/upload-artifact@v4 with: - name: nvim-linux64 + name: nvim-linux-${{ matrix.arch }} path: | - build/nvim-linux64.tar.gz + build/nvim-linux-${{ matrix.arch }}.tar.gz retention-days: 1 - name: Export version id: build @@ -75,7 +89,6 @@ jobs: printf 'version<<END\n' >> $GITHUB_OUTPUT ./build/bin/nvim --version | head -n 3 >> $GITHUB_OUTPUT printf 'END\n' >> $GITHUB_OUTPUT - macos: needs: setup strategy: @@ -104,7 +117,6 @@ jobs: -D CMAKE_BUILD_TYPE=${{ needs.setup.outputs.build_type }} \ -D CMAKE_FIND_FRAMEWORK=NEVER cmake --build .deps - - name: Build neovim run: | cmake -B build -G Ninja \ @@ -112,7 +124,6 @@ jobs: -D ENABLE_LIBINTL=OFF \ -D CMAKE_FIND_FRAMEWORK=NEVER cmake --build build - - name: Package run: cpack --config build/CPackConfig.cmake @@ -185,23 +196,45 @@ jobs: echo 'PRERELEASE=') >> $GITHUB_ENV gh release delete stable --yes || true git push origin :stable || true + - name: Rename aarch64 artifacts + run: | + cd ./nvim-linux-aarch64 + mv nvim-linux-aarch64.tar.gz nvim-linux-arm64.tar.gz + cd ../appimage-aarch64 + mv nvim-linux-aarch64.appimage nvim-linux-arm64.appimage + mv nvim-linux-aarch64.appimage.zsync nvim-linux-arm64.appimage.zsync # `sha256sum` outputs <sha> <path>, so we cd into each dir to drop the # containing folder from the output. - - name: Generate Linux64 SHA256 checksums + - name: Generate Linux x86_64 SHA256 checksums + run: | + cd ./nvim-linux-x86_64 + sha256sum nvim-linux-x86_64.tar.gz > nvim-linux-x86_64.tar.gz.sha256sum + echo "SHA_LINUX_X86_64_TAR=$(cat nvim-linux-x86_64.tar.gz.sha256sum)" >> $GITHUB_ENV + - name: Generate Linux arm64 SHA256 checksums run: | - cd ./nvim-linux64 - sha256sum nvim-linux64.tar.gz > nvim-linux64.tar.gz.sha256sum - echo "SHA_LINUX_64_TAR=$(cat nvim-linux64.tar.gz.sha256sum)" >> $GITHUB_ENV - - name: Generate App Image SHA256 checksums + cd ./nvim-linux-aarch64 + sha256sum nvim-linux-arm64.tar.gz > nvim-linux-arm64.tar.gz.sha256sum + echo "SHA_LINUX_ARM64_TAR=$(cat nvim-linux-arm64.tar.gz.sha256sum)" >> $GITHUB_ENV + - name: Generate AppImage x64_64 SHA256 checksums run: | - cd ./appimage - sha256sum nvim.appimage > nvim.appimage.sha256sum - echo "SHA_APP_IMAGE=$(cat nvim.appimage.sha256sum)" >> $GITHUB_ENV - - name: Generate App Image Zsync SHA256 checksums + cd ./appimage-x86_64 + sha256sum nvim-linux-x86_64.appimage > nvim-linux-x86_64.appimage.sha256sum + echo "SHA_APPIMAGE_X86_64=$(cat nvim-linux-x86_64.appimage.sha256sum)" >> $GITHUB_ENV + - name: Generate AppImage x86_64 Zsync SHA256 checksums run: | - cd ./appimage - sha256sum nvim.appimage.zsync > nvim.appimage.zsync.sha256sum - echo "SHA_APP_IMAGE_ZSYNC=$(cat nvim.appimage.zsync.sha256sum)" >> $GITHUB_ENV + cd ./appimage-x86_64 + sha256sum nvim-linux-x86_64.appimage.zsync > nvim-linux-x86_64.appimage.zsync.sha256sum + echo "SHA_APPIMAGE_X86_64_ZSYNC=$(cat nvim-linux-x86_64.appimage.zsync.sha256sum)" >> $GITHUB_ENV + - name: Generate AppImage x64_64 SHA256 checksums + run: | + cd ./appimage-aarch64 + sha256sum nvim-linux-arm64.appimage > nvim-linux-arm64.appimage.sha256sum + echo "SHA_APPIMAGE_ARM64=$(cat nvim-linux-arm64.appimage.sha256sum)" >> $GITHUB_ENV + - name: Generate AppImage arm64 Zsync SHA256 checksums + run: | + cd ./appimage-aarch64 + sha256sum nvim-linux-arm64.appimage.zsync > nvim-linux-arm64.appimage.zsync.sha256sum + echo "SHA_APPIMAGE_ARM64_ZSYNC=$(cat nvim-linux-arm64.appimage.zsync.sha256sum)" >> $GITHUB_ENV - name: Generate macos x86_64 SHA256 checksums run: | cd ./nvim-macos-x86_64 @@ -219,6 +252,16 @@ jobs: echo "SHA_WIN_64_ZIP=$(cat nvim-win64.zip.sha256sum)" >> $GITHUB_ENV sha256sum nvim-win64.msi > nvim-win64.msi.sha256sum echo "SHA_WIN_64_MSI=$(cat nvim-win64.msi.sha256sum)" >> $GITHUB_ENV + - name: Create linux64 aliases # For backward compatibility; remove for 0.12 + run: | + cd ./nvim-linux-x86_64 + cp nvim-linux-x86_64.tar.gz nvim-linux64.tar.gz + cp nvim-linux-x86_64.tar.gz.sha256sum nvim-linux64.tar.gz.sha256sum + cd ../appimage-x86_64 + cp nvim-linux-x86_64.appimage nvim.appimage + cp nvim-linux-x86_64.appimage.sha256sum nvim.appimage.sha256sum + cp nvim-linux-x86_64.appimage.zsync nvim.appimage.zsync + cp nvim-linux-x86_64.appimage.zsync.sha256sum nvim.appimage.zsync.sha256sum - name: Publish release env: NVIM_VERSION: ${{ needs.linux.outputs.version }} @@ -226,6 +269,6 @@ jobs: run: | envsubst < "$GITHUB_WORKSPACE/.github/workflows/notes.md" > "$RUNNER_TEMP/notes.md" if [ "$TAG_NAME" != "nightly" ]; then - gh release create stable $PRERELEASE --notes-file "$RUNNER_TEMP/notes.md" --title "$SUBJECT" --target $GITHUB_SHA nvim-macos-x86_64/* nvim-macos-arm64/* nvim-linux64/* appimage/* nvim-win64/* + gh release create stable $PRERELEASE --notes-file "$RUNNER_TEMP/notes.md" --title "$SUBJECT" --target $GITHUB_SHA nvim-macos-x86_64/* nvim-macos-arm64/* nvim-linux-x86_64/* nvim-linux-aarch64/* appimage-x86_64/* appimage-aarch64/* nvim-win64/* fi - gh release create $TAG_NAME $PRERELEASE --notes-file "$RUNNER_TEMP/notes.md" --title "$SUBJECT" --target $GITHUB_SHA nvim-macos-x86_64/* nvim-macos-arm64/* nvim-linux64/* appimage/* nvim-win64/* + gh release create $TAG_NAME $PRERELEASE --notes-file "$RUNNER_TEMP/notes.md" --title "$SUBJECT" --target $GITHUB_SHA nvim-macos-x86_64/* nvim-macos-arm64/* nvim-linux-x86_64/* nvim-linux-aarch64/* appimage-x86_64/* appimage-aarch64/* nvim-win64/* @@ -13,7 +13,7 @@ - To build on Windows, see the [Building on Windows](#building-on-windows) section. _MSVC (Visual Studio) is recommended._ 5. `sudo make install` - Default install location is `/usr/local` - - On Debian/Ubuntu, instead of `sudo make install`, you can try `cd build && cpack -G DEB && sudo dpkg -i nvim-linux64.deb` to build DEB-package and install it. This helps ensure clean removal of installed files. Note: This is an unsupported, "best-effort" feature of the Nvim build. + - On Debian/Ubuntu, instead of `sudo make install`, you can try `cd build && cpack -G DEB && sudo dpkg -i nvim-linux-<arch>.deb` (with `<arch>` either `x86_64` or `arm64`) to build DEB-package and install it. This helps ensure clean removal of installed files. Note: This is an unsupported, "best-effort" feature of the Nvim build. **Notes**: - From the repository's root directory, running `make` will download and build all the needed dependencies and put the `nvim` executable in `build/bin`. diff --git a/INSTALL.md b/INSTALL.md index 807922e2e3..0701bf2720 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -15,9 +15,10 @@ Install from download Downloads are available on the [Releases](https://github.com/neovim/neovim/releases) page. * Latest [stable release](https://github.com/neovim/neovim/releases/latest) - * [macOS x86](https://github.com/neovim/neovim/releases/latest/download/nvim-macos-x86_64.tar.gz) - * [macOS arm](https://github.com/neovim/neovim/releases/latest/download/nvim-macos-arm64.tar.gz) - * [Linux](https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz) + * [macOS x86_64](https://github.com/neovim/neovim/releases/latest/download/nvim-macos-x86_64.tar.gz) + * [macOS arm64](https://github.com/neovim/neovim/releases/latest/download/nvim-macos-arm64.tar.gz) + * [Linux x86_64](https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz) + * [Linux arm64](https://github.com/neovim/neovim/releases/latest/download/nvim-linux-arm64.tar.gz) * [Windows](https://github.com/neovim/neovim/releases/latest/download/nvim-win64.msi) * Latest [development prerelease](https://github.com/neovim/neovim/releases/nightly) @@ -118,24 +119,24 @@ Then add this to your shell config (`~/.bashrc`, `~/.zshrc`, ...): ### AppImage ("universal" Linux package) -The [Releases](https://github.com/neovim/neovim/releases) page provides an [AppImage](https://appimage.org) that runs on most Linux systems. No installation is needed, just download `nvim.appimage` and run it. (It might not work if your Linux distribution is more than 4 years old.) +The [Releases](https://github.com/neovim/neovim/releases) page provides an [AppImage](https://appimage.org) that runs on most Linux systems. No installation is needed, just download `nvim-linux-x86_64.appimage` and run it. (It might not work if your Linux distribution is more than 4 years old.) The following instructions assume an `x86_64` architecture; on ARM Linux replace with `arm64`. - curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim.appimage - chmod u+x nvim.appimage - ./nvim.appimage + curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-86_64.appimage + chmod u+x nvim-linux-x86_64.appimage + ./nvim-linux-x86_64.appimage To expose nvim globally: mkdir -p /opt/nvim - mv nvim.appimage /opt/nvim/nvim + mv nvim-linux-x86_64.appimage /opt/nvim/nvim And the following line to your shell config (`~/.bashrc`, `~/.zshrc`, ...): export PATH="$PATH:/opt/nvim/" -If the `./nvim.appimage` command fails, try: +If the `./nvim-linux-x86_64.appimage` command fails, try: ```sh -./nvim.appimage --appimage-extract +./nvim-linux-x86_64.appimage --appimage-extract ./squashfs-root/AppRun --version # Optional: exposing nvim globally. diff --git a/cmake.packaging/CMakeLists.txt b/cmake.packaging/CMakeLists.txt index 8c158c39dc..54b6285954 100644 --- a/cmake.packaging/CMakeLists.txt +++ b/cmake.packaging/CMakeLists.txt @@ -53,7 +53,7 @@ elseif(APPLE) set(CPACK_GENERATOR TGZ) set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_LIST_DIR}/neovim.icns) elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(CPACK_PACKAGE_FILE_NAME "nvim-linux64") + set(CPACK_PACKAGE_FILE_NAME "nvim-linux-${CMAKE_SYSTEM_PROCESSOR}") set(CPACK_GENERATOR TGZ DEB) set(CPACK_DEBIAN_PACKAGE_NAME "Neovim") # required set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Neovim.io") # required diff --git a/runtime/doc/support.txt b/runtime/doc/support.txt index 088677e813..103fb90b6d 100644 --- a/runtime/doc/support.txt +++ b/runtime/doc/support.txt @@ -14,8 +14,8 @@ Supported platforms *supported-platforms* `System` `Tier` `Versions` `Tested versions` Linux (x86_64) 1 >= 2.6.32, glibc >= 2.12 Ubuntu 24.04 Linux (arm64) 1 >= 2.6.32, glibc >= 2.12 Ubuntu 24.04 -macOS (Intel) 1 >= 11 macOS 13 -macOS (M1) 1 >= 11 macOS 15 +macOS (x86_64) 1 >= 11 macOS 13 +macOS (arm64) 1 >= 11 macOS 15 Windows 64-bit 1 >= Windows 10 Version 1809 Windows Server 2022 FreeBSD 1 >= 10 FreeBSD 14 OpenBSD 2 >= 7 diff --git a/scripts/genappimage.sh b/scripts/genappimage.sh index e8aac42a9c..63cda6d6ec 100755 --- a/scripts/genappimage.sh +++ b/scripts/genappimage.sh @@ -40,16 +40,16 @@ export VERSION cd "$APP_BUILD_DIR" || exit # Only downloads linuxdeploy if the remote file is different from local -if [ -e "$APP_BUILD_DIR"/linuxdeploy-x86_64.AppImage ]; then - curl -Lo "$APP_BUILD_DIR"/linuxdeploy-x86_64.AppImage \ - -z "$APP_BUILD_DIR"/linuxdeploy-x86_64.AppImage \ - https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage +if [ -e "$APP_BUILD_DIR"/linuxdeploy-"$ARCH".AppImage ]; then + curl -Lo "$APP_BUILD_DIR"/linuxdeploy-"$ARCH".AppImage \ + -z "$APP_BUILD_DIR"/linuxdeploy-"$ARCH".AppImage \ + https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-"$ARCH".AppImage else - curl -Lo "$APP_BUILD_DIR"/linuxdeploy-x86_64.AppImage \ - https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage + curl -Lo "$APP_BUILD_DIR"/linuxdeploy-"$ARCH".AppImage \ + https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-"$ARCH".AppImage fi -chmod +x "$APP_BUILD_DIR"/linuxdeploy-x86_64.AppImage +chmod +x "$APP_BUILD_DIR"/linuxdeploy-"$ARCH".AppImage # metainfo is not packaged automatically by linuxdeploy mkdir -p "$APP_DIR/usr/share/metainfo/" @@ -76,23 +76,23 @@ chmod 755 AppRun cd "$APP_BUILD_DIR" || exit # Get out of AppImage directory. # Set the name of the file generated by appimage -export OUTPUT=nvim.appimage +export OUTPUT=nvim-linux-"$ARCH".appimage # If it's a release generate the zsync file if [ -n "$TAG" ]; then - export UPDATE_INFORMATION="gh-releases-zsync|neovim|neovim|$TAG|nvim.appimage.zsync" + export UPDATE_INFORMATION="gh-releases-zsync|neovim|neovim|$TAG|nvim-linux-$ARCH.appimage.zsync" fi # Generate AppImage. # - Expects: $ARCH, $APP, $VERSION env vars # - Expects: ./$APP.AppDir/ directory -# - Produces: ./nvim.appimage -./linuxdeploy-x86_64.AppImage --appdir $APP.AppDir -d "$ROOT_DIR"/runtime/nvim.desktop -i \ +# - Produces: ./nvim-linux-$ARCH.appimage +./linuxdeploy-"$ARCH".AppImage --appdir $APP.AppDir -d "$ROOT_DIR"/runtime/nvim.desktop -i \ "$ROOT_DIR/runtime/nvim.png" --output appimage # Moving the final executable to a different folder so it isn't in the # way for a subsequent build. -mv "$ROOT_DIR"/build/nvim.appimage* "$ROOT_DIR"/build/bin +mv "$ROOT_DIR"/build/nvim-linux-"$ARCH".appimage* "$ROOT_DIR"/build/bin echo 'genappimage.sh: finished' |