123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- 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
- # Build with gcc-10 to prevent triggering #14150 (default is still gcc-9 on 20.04)
- jobs:
- setup:
- runs-on: ubuntu-latest
- outputs:
- build_type: ${{ steps.build.outputs.build_type }}
- appimage_tag: ${{ steps.build.outputs.appimage_tag }}
- steps:
- # Nightly uses RelWithDebInfo while stable uses Release (which disables
- # asserts). This helps get better debug info from people brave enough to
- # use the nightly builds.
- - if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && github.event.inputs.tag_name != 'nightly')
- run: |
- echo 'CMAKE_BUILD_TYPE=Release' >> $GITHUB_ENV
- echo 'APPIMAGE_TAG=latest' >> $GITHUB_ENV
- - if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.event.inputs.tag_name == 'nightly')
- run: |
- echo 'CMAKE_BUILD_TYPE=RelWithDebInfo' >> $GITHUB_ENV
- echo 'APPIMAGE_TAG=nightly' >> $GITHUB_ENV
- - name: Export build information
- id: build
- run: |
- printf "build_type=${CMAKE_BUILD_TYPE}\n" >> $GITHUB_OUTPUT
- printf "appimage_tag=${APPIMAGE_TAG}\n" >> $GITHUB_OUTPUT
- linux:
- runs-on: ubuntu-20.04
- needs: setup
- env:
- CC: gcc-10
- outputs:
- version: ${{ steps.build.outputs.version }}
- steps:
- - uses: actions/checkout@v4
- with:
- # Perform a full checkout #13471
- fetch-depth: 0
- - run: ./.github/scripts/install_deps.sh
- - run: echo "CMAKE_BUILD_TYPE=${{ needs.setup.outputs.build_type }}" >> $GITHUB_ENV
- - name: appimage
- 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
- path: |
- build/bin/nvim.appimage
- build/bin/nvim.appimage.zsync
- retention-days: 1
- - uses: actions/upload-artifact@v4
- with:
- name: nvim-linux64
- path: |
- build/nvim-linux64.tar.gz
- retention-days: 1
- - name: Export version
- id: build
- run: |
- printf 'version<<END\n' >> $GITHUB_OUTPUT
- ./build/bin/nvim --version | head -n 3 >> $GITHUB_OUTPUT
- printf 'END\n' >> $GITHUB_OUTPUT
- macos:
- needs: setup
- strategy:
- fail-fast: false
- matrix:
- runner: [ macos-13, macos-14 ]
- include:
- - runner: macos-13
- arch: x86_64
- - runner: macos-14
- arch: arm64
- runs-on: ${{ matrix.runner }}
- env:
- MACOSX_DEPLOYMENT_TARGET: 11.0
- steps:
- - uses: actions/checkout@v4
- with:
- # Perform a full checkout #13471
- fetch-depth: 0
- - name: Install dependencies
- run: ./.github/scripts/install_deps.sh
- - name: Build deps
- run: |
- cmake -S cmake.deps -B .deps -G Ninja \
- -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 \
- -D CMAKE_BUILD_TYPE=${{ needs.setup.outputs.build_type }} \
- -D ENABLE_LIBINTL=OFF \
- -D CMAKE_FIND_FRAMEWORK=NEVER
- cmake --build build
- - name: Package
- run: cpack --config build/CPackConfig.cmake
- - uses: actions/upload-artifact@v4
- with:
- name: nvim-macos-${{ matrix.arch }}
- path: build/nvim-macos-${{ matrix.arch }}.tar.gz
- retention-days: 1
- windows:
- needs: setup
- runs-on: windows-2019
- steps:
- - uses: actions/checkout@v4
- with:
- # Perform a full checkout #13471
- fetch-depth: 0
- - run: .github/scripts/env.ps1
- - name: Build deps
- run: |
- cmake -S cmake.deps -B .deps -G Ninja -DCMAKE_BUILD_TYPE=${{ needs.setup.outputs.build_type }}
- cmake --build .deps
- - name: build package
- run: |
- cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ needs.setup.outputs.build_type }}
- cmake --build build --target package
- - uses: actions/upload-artifact@v4
- with:
- name: nvim-win64
- path: |
- build/nvim-win64.msi
- build/nvim-win64.zip
- retention-days: 1
- publish:
- needs: [linux, macos, windows]
- runs-on: ubuntu-latest
- env:
- GH_REPO: ${{ github.repository }}
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- 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@v4
- - uses: actions/download-artifact@v4
- - 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'
- 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'
- 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
- - 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 x86_64 SHA256 checksums
- run: |
- cd ./nvim-macos-x86_64
- sha256sum nvim-macos-x86_64.tar.gz > nvim-macos-x86_64.tar.gz.sha256sum
- echo "SHA_MACOS_X86_64=$(cat nvim-macos-x86_64.tar.gz.sha256sum)" >> $GITHUB_ENV
- - name: Generate macos arm64 SHA256 checksums
- run: |
- cd ./nvim-macos-arm64
- sha256sum nvim-macos-arm64.tar.gz > nvim-macos-arm64.tar.gz.sha256sum
- echo "SHA_MACOS_ARM64=$(cat nvim-macos-arm64.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
- - name: Publish release
- env:
- NVIM_VERSION: ${{ needs.linux.outputs.version }}
- DEBUG: api
- 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/*
- 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/*
|