mirror of
https://github.com/neovim/neovim.git
synced 2026-03-20 15:39:43 +00:00
Addresses: #12571 - Added the following installers through CMake files: - Windows NSIS. - Windows MSI. - Windows zip. - MacOs tarball. - Linux tarball. - Linux Deb package. - Tweaked pipeline CPack commands to build using new CMakeLists.txt configuration file. - Added icons and relevant packaging files. - Updated notes.md to reflect new installation instructions. This isn't meant to be the perfect solution, it's simply a first pass at using a simple packaging system to build Windows installers. A Debian package has also been added since it's very easy but other packages have been left out due to limiting the scope. Hopefully we can build further upon this and improve it over time with code signing, better icons and more user-friendly installation graphics and so on.
242 lines
9.7 KiB
YAML
242 lines
9.7 KiB
YAML
name: Release
|
|
on:
|
|
schedule:
|
|
- cron: '5 5 * * *'
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag_name:
|
|
description: 'Tag name for release'
|
|
required: false
|
|
default: nightly
|
|
push:
|
|
tags:
|
|
- v[0-9]+.[0-9]+.[0-9]+
|
|
|
|
# Build on the oldest supported images, so we have broader compatibility
|
|
# Upgrade to gcc-11 to prevent it from using its builtins (#14150)
|
|
jobs:
|
|
linux:
|
|
runs-on: ubuntu-18.04
|
|
outputs:
|
|
version: ${{ steps.build.outputs.version }}
|
|
release: ${{ steps.build.outputs.release }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y autoconf automake build-essential cmake gcc-11 gettext gperf libtool-bin locales ninja-build pkg-config unzip
|
|
- if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && github.event.inputs.tag_name != 'nightly')
|
|
run: printf 'NVIM_BUILD_TYPE=Release\n' >> $GITHUB_ENV
|
|
- if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.event.inputs.tag_name == 'nightly')
|
|
run: printf 'NVIM_BUILD_TYPE=RelWithDebInfo\n' >> $GITHUB_ENV
|
|
- name: Build release
|
|
id: build
|
|
run: |
|
|
CC=gcc-11 make CMAKE_BUILD_TYPE=${NVIM_BUILD_TYPE} CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX:PATH="
|
|
printf '::set-output name=version::%s\n' "$(./build/bin/nvim --version | head -n 3 | sed -z 's/\n/%0A/g')"
|
|
printf '::set-output name=release::%s\n' "$(./build/bin/nvim --version | head -n 1)"
|
|
make DESTDIR="$GITHUB_WORKSPACE/build/release/nvim-linux64" install
|
|
cd "$GITHUB_WORKSPACE/build/"
|
|
cpack -C $NVIM_BUILD_TYPE
|
|
- uses: actions/upload-artifact@v2
|
|
with:
|
|
name: nvim-linux64
|
|
path: build/nvim-linux64.tar.gz
|
|
retention-days: 1
|
|
- uses: actions/upload-artifact@v2
|
|
with:
|
|
name: nvim-linux64
|
|
path: build/nvim-linux64.deb
|
|
retention-days: 1
|
|
|
|
appimage:
|
|
runs-on: ubuntu-18.04
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y autoconf automake build-essential cmake gcc-11 gettext gperf libtool-bin locales ninja-build pkg-config unzip
|
|
- if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && github.event.inputs.tag_name != 'nightly')
|
|
run: CC=gcc-11 make appimage-latest
|
|
- if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.event.inputs.tag_name == 'nightly')
|
|
run: CC=gcc-11 make appimage-nightly
|
|
- uses: actions/upload-artifact@v2
|
|
with:
|
|
name: appimage
|
|
path: build/bin/nvim.appimage
|
|
retention-days: 1
|
|
- uses: actions/upload-artifact@v2
|
|
with:
|
|
name: appimage
|
|
path: build/bin/nvim.appimage.zsync
|
|
retention-days: 1
|
|
|
|
macOS:
|
|
runs-on: macos-10.15
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Install brew packages
|
|
run: |
|
|
brew update >/dev/null
|
|
brew install automake ninja
|
|
- if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && github.event.inputs.tag_name != 'nightly')
|
|
run: printf 'NVIM_BUILD_TYPE=Release\n' >> $GITHUB_ENV
|
|
- if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.event.inputs.tag_name == 'nightly')
|
|
run: printf 'NVIM_BUILD_TYPE=RelWithDebInfo\n' >> $GITHUB_ENV
|
|
- name: Build release
|
|
run: |
|
|
make CMAKE_BUILD_TYPE=${NVIM_BUILD_TYPE} CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11"
|
|
make DESTDIR="$GITHUB_WORKSPACE/build/release/nvim-osx64" install
|
|
- name: Create package
|
|
run: |
|
|
cd "$GITHUB_WORKSPACE/build/release"
|
|
mkdir -p nvim-osx64/libs
|
|
libs=($(otool -L nvim-osx64/bin/nvim | sed 1d | sed -E -e 's|^[[:space:]]*||' -e 's| .*||'))
|
|
echo "libs:"
|
|
for lib in "${libs[@]}"; do
|
|
if echo "$lib" | grep -q -E 'libSystem|CoreFoundation' 2>/dev/null; then
|
|
echo " [skipped] $lib"
|
|
else
|
|
echo " $lib"
|
|
relname="libs/${lib##*/}"
|
|
cp -L "$lib" "nvim-osx64/$relname"
|
|
install_name_tool -change "$lib" "@executable_path/../$relname" nvim-osx64/bin/nvim
|
|
fi
|
|
done
|
|
tar cfz nvim-macos.tar.gz nvim-osx64
|
|
- uses: actions/upload-artifact@v2
|
|
with:
|
|
name: nvim-macos
|
|
path: build/release/nvim-macos.tar.gz
|
|
retention-days: 1
|
|
|
|
windows:
|
|
runs-on: windows-2016
|
|
env:
|
|
DEPS_BUILD_DIR: ${{ format('{0}/nvim-deps', github.workspace) }}
|
|
DEPS_PREFIX: ${{ format('{0}/nvim-deps/usr', github.workspace) }}
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- config: MSVC_64
|
|
archive: nvim-win64
|
|
name: windows (${{ matrix.config }})
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
- run: powershell ci\build.ps1 -NoTests
|
|
env:
|
|
CONFIGURATION: ${{ matrix.config }}
|
|
- uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ matrix.archive }}
|
|
path: build/${{ matrix.archive }}.zip
|
|
retention-days: 1
|
|
- uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ matrix.archive }}
|
|
path: build/${{ matrix.archive }}.msi
|
|
retention-days: 1
|
|
- uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ matrix.archive }}
|
|
path: build/${{ matrix.archive }}.exe
|
|
retention-days: 1
|
|
|
|
publish:
|
|
needs: [linux, appimage, macOS, windows]
|
|
runs-on: ubuntu-20.04
|
|
env:
|
|
GH_REPO: ${{ github.repository }}
|
|
permissions:
|
|
contents: write
|
|
steps:
|
|
# Must perform checkout first, since it deletes the target directory
|
|
# before running, and would therefore delete the downloaded artifacts
|
|
- uses: actions/checkout@v2
|
|
|
|
- uses: actions/download-artifact@v2
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y gettext-base
|
|
|
|
- if: github.event_name == 'workflow_dispatch'
|
|
run: echo "TAG_NAME=${{ github.event.inputs.tag_name }}" >> $GITHUB_ENV
|
|
- if: github.event_name == 'schedule'
|
|
run: echo 'TAG_NAME=nightly' >> $GITHUB_ENV
|
|
- if: github.event_name == 'push'
|
|
run: |
|
|
TAG_NAME=${{ github.ref }}
|
|
echo "TAG_NAME=${TAG_NAME#refs/tags/}" >> $GITHUB_ENV
|
|
- if: env.TAG_NAME == 'nightly'
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
(echo 'SUBJECT=Nvim development (prerelease) build';
|
|
echo 'PRERELEASE=--prerelease') >> $GITHUB_ENV
|
|
gh release delete nightly --yes || true
|
|
git push origin :nightly || true
|
|
- if: env.TAG_NAME != 'nightly'
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
(echo 'SUBJECT=Nvim release build';
|
|
echo 'PRERELEASE=') >> $GITHUB_ENV
|
|
gh release delete stable --yes || true
|
|
git push origin :stable || true
|
|
# `sha256sum` outputs <sha> <path>, so we cd into each dir to drop the
|
|
# containing folder from the output.
|
|
- name: Generate Linux64 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
|
|
sha256sum nvim-linux64.deb > nvim-linux64.deb.sha256sum
|
|
echo "SHA_LINUX_64_DEB=$(cat nvim-linux64.deb.sha256sum)" >> $GITHUB_ENV
|
|
- name: Generate App Image 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
|
|
run: |
|
|
cd ./appimage
|
|
sha256sum nvim.appimage.zsync > nvim.appimage.zsync.sha256sum
|
|
echo "SHA_APP_IMAGE_ZSYNC=$(cat nvim.appimage.zsync.sha256sum)" >> $GITHUB_ENV
|
|
- name: Generate macOS SHA256 checksums
|
|
run: |
|
|
cd ./nvim-macos
|
|
sha256sum nvim-macos.tar.gz > nvim-macos.tar.gz.sha256sum
|
|
echo "SHA_MACOS=$(cat nvim-macos.tar.gz.sha256sum)" >> $GITHUB_ENV
|
|
- name: Generate Win64 SHA256 checksums
|
|
run: |
|
|
cd ./nvim-win64
|
|
sha256sum nvim-win64.zip > nvim-win64.zip.sha256sum
|
|
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
|
|
sha256sum nvim-win64.exe > nvim-win64.exe.sha256sum
|
|
echo "SHA_WIN_64_EXE=$(cat nvim-win64.exe.sha256sum)" >> $GITHUB_ENV
|
|
- name: Publish release
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
NVIM_VERSION: ${{ needs.linux.outputs.version }}
|
|
DEBUG: api
|
|
run: |
|
|
envsubst < "$GITHUB_WORKSPACE/.github/workflows/notes.md" > "$RUNNER_TEMP/notes.md"
|
|
gh release create $TAG_NAME $PRERELEASE --notes-file "$RUNNER_TEMP/notes.md" --title "$SUBJECT" --target $GITHUB_SHA nvim-macos/* nvim-linux64/* appimage/* nvim-win64/*
|
|
if [ "$TAG_NAME" != "nightly" ]; then
|
|
gh release create stable $PRERELEASE --notes-file "$RUNNER_TEMP/notes.md" --title "$SUBJECT" --target $GITHUB_SHA nvim-macos/* nvim-linux64/* appimage/* nvim-win64/*
|
|
fi
|