Skip to content

Release

Release #901

Workflow file for this run

name: Release
on:
schedule:
- cron: '0 2 * * *' # run at 2 AM UTC
workflow_dispatch:
inputs:
tag_name:
description: 'Tag name for release'
required: false
default: nightly
push:
tags:
- v[0-9]+.[0-9]+.[0-9]+
env:
cache-version: v9
jobs:
check-new-commit:
runs-on: ubuntu-20.04
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0
- run: >
test \( "${{github.event_name}}" == "schedule"
-a 0 -lt $(git log --oneline --show-pulls --since "yesterday" -- . ":!.github" ":!.gitignore" ":!.golangci.yml" | wc -l) \)
-o \( "${{github.event_name}}" != "schedule" \)
#################################################################
# Linux
#################################################################
linux:
needs: [check-new-commit]
strategy:
matrix:
go-version: [1.21.x]
platform: [ubuntu-20.04]
qtversion: [5.15.6]
runs-on: ${{ matrix.platform }}
env:
GOPATH: ${{ github.workspace }}
QT_DIR: ${{ github.workspace }}/Qt
QT_VERSION: ${{ matrix.qtversion }}
QT_API: 5.13.0
QT_DEBUG: false
GO111MODULE: on
QT_STATIC: true
QT_QMAKE_DIR: ${{ github.workspace }}/Qt/${{ matrix.qtversion }}/gcc_64/bin
steps:
- name: Linux prerequisites
run: |
sudo apt update
sudo apt-get -y install build-essential libglu1-mesa-dev libpulse-dev libglib2.0-dev cmake
sudo apt-get --no-install-recommends -qq -y install fontconfig libasound2 libegl1-mesa libnss3 libpci3 libxcomposite1 libxcursor1 libxi6 libxrandr2 libxtst6
sudo apt-get --no-install-recommends -qq -y install libdbus-1-dev libssl-dev libzstd-dev
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install libwayland-dev libwayland-egl++ wayland-scanner++
- name: Install Go
uses: actions/setup-go@v4
with:
go-version: ${{ matrix.go-version }}
- uses: actions/cache@v2
id: cache-qt-linux
with:
path: ${{ github.workspace }}/Qt/${{ matrix.qtversion }}/gcc_64
key: ${{ matrix.qtversion }}-qt-linux-${{ env.cache-version }}
- name: Build Qt
if: ${{ steps.cache-qt-linux.outputs.cache-hit != 'true' }}
run: |
curl -L -o qt-everywhere-opensource-src-${{ matrix.qtversion }}.tar.xz https://download.qt.io/official_releases/qt/5.15/${{ matrix.qtversion }}/single/qt-everywhere-opensource-src-${{ matrix.qtversion }}.tar.xz
tar Jxf qt-everywhere-opensource-src-${{ matrix.qtversion }}.tar.xz
rm qt-everywhere-opensource-src-${{ matrix.qtversion }}.tar.xz
mv qt-everywhere-src-${{ matrix.qtversion }} qt5
ls -l ${{ github.workspace }}/qt5
cd ${{ github.workspace }}/qt5 && ./configure -prefix ${{ github.workspace }}/Qt/${{ matrix.qtversion }}/gcc_64 -no-icu -confirm-license -opensource -static -qt-zlib -qt-libpng -qt-libjpeg -xcb -xcb-xlib -bundled-xcb-xinput -sysconfdir /etc/xdg -dbus-runtime -openssl-runtime -opengl -optimize-size -skip qtwebengine -skip qtfeedback -skip qtpim -feature-wayland-client -nomake tests -nomake examples && make -j $(grep -c ^processor /proc/cpuinfo) && make install -j $(grep -c ^processor /proc/cpuinfo)
rm -fr ${{ github.workspace }}/qt5
- name: Build fcitx5
env:
FILE: ${{ github.workspace }}/fcitx-qt5/qt5/platforminputcontext/CMakeLists.txt
CMAKE_PREFIX_PATH: ${{ github.workspace }}/Qt/${{ matrix.qtversion }}/gcc_64/lib/cmake
Qt5_DIR: ${{ github.workspace }}/Qt/${{ matrix.qtversion }}/gcc_64/lib/cmake/Qt5
run: |
git clone -q --depth 1 https:/fcitx/fcitx-qt5.git
echo -e "ADD_DEFINITIONS(-DQT_STATICPLUGIN)\n$(cat $FILE)" > $FILE
echo -e "find_package(Qt5 REQUIRED COMPONENTS Core Gui DBus)\n$(cat $FILE)" > $FILE
echo -e "$(head -n -5 $FILE)" > $FILE
sed -i -e 's/ MODULE / STATIC /g' $FILE
cd fcitx-qt5/qt5/platforminputcontext && cmake . && make -j $(grep -c ^processor /proc/cpuinfo)
- name: Copy libfcitxplatforminputcontextplugin.a
run: |
cp -p ${{ github.workspace }}/fcitx-qt5/qt5/platforminputcontext/libfcitxplatforminputcontextplugin.a ${{ github.workspace }}/Qt/${{ matrix.qtversion }}/gcc_64/plugins/platforminputcontexts/
rm -fr ${{ github.workspace }}/fcitx-qt5
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0
path: ${{ github.workspace }}/src/github.com/${{ github.repository }}
- name: Free disk space
run: |
sudo swapoff -a
sudo rm -f /swapfile
sudo apt clean
sudo rm -rf /usr/share/dotnet
- name: Get Qt binding for Go
env:
Qt5_DIR: ${{ github.workspace }}/Qt/${{ matrix.qtversion }}/gcc_64/lib/cmake/Qt5
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}
make qt_bindings
- name: Get dependencies
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}
make deps
- name: Retrieve version
id: version-linux
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}
echo "::set-output name=GONEOVIM_VERSION::$(git describe --tags)"
- name: Build
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}
make app
- if: github.event_name == 'workflow_dispatch'
run: echo "ARCHIVE_NAME=goneovim-linux" >> $GITHUB_ENV
- if: github.event_name == 'schedule'
run: echo "ARCHIVE_NAME=goneovim-linux" >> $GITHUB_ENV
- if: github.event_name == 'push'
run: echo "ARCHIVE_NAME=goneovim-${{ steps.version-linux.outputs.GONEOVIM_VERSION }}-linux" >> $GITHUB_ENV
- name: Archive
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}/cmd/goneovim/deploy
mv linux "$ARCHIVE_NAME"
tar -jcvf "$ARCHIVE_NAME".tar.bz2 "$ARCHIVE_NAME"
- name: Upload for linux
uses: actions/upload-artifact@v1
with:
name: goneovim-linux
path: ${{ github.workspace }}/src/github.com/${{ github.repository }}/cmd/goneovim/deploy/${{ env.ARCHIVE_NAME }}.tar.bz2
#################################################################
# MacOS x86_64
#################################################################
macos-x86_64:
needs: [check-new-commit]
strategy:
matrix:
go-version: [1.21.x]
platform: [macos-12]
runs-on: ${{ matrix.platform }}
env:
GOPATH: ${{ github.workspace }}
QT_HOMEBREW: true
QT_API: 5.13.0
QT_DEBUG: false
GO111MODULE: on
QT_QMAKE_DIR: /usr/local/opt/qt@5/bin
steps:
- name: Install Go
uses: actions/setup-go@v4
with:
go-version: ${{ matrix.go-version }}
- name: Install Qt for macOS
run: |
brew install qt@5
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0
path: ${{ github.workspace }}/src/github.com/${{ github.repository }}
- name: Get Qt binding for Go
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}
make qt_bindings
- name: Get dependencies
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}
make deps
- name: Retrieve version
id: version-macos
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}
echo "::set-output name=GONEOVIM_VERSION::$(git describe --tags)"
echo "::set-output name=GONEOVIM_VERSION_HASH::$(git rev-parse HEAD)"
- name: Build
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}
make app
- if: github.event_name == 'workflow_dispatch'
run: echo "ARCHIVE_NAME=goneovim-macos-x86_64" >> $GITHUB_ENV
- if: github.event_name == 'schedule'
run: echo "ARCHIVE_NAME=goneovim-macos-x86_64" >> $GITHUB_ENV
- if: github.event_name == 'push'
run: echo "ARCHIVE_NAME=goneovim-${{ steps.version-macos.outputs.GONEOVIM_VERSION }}-macos-x86_64" >> $GITHUB_ENV
- name: Archive
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}/cmd/goneovim/deploy
mv darwin "$ARCHIVE_NAME"
tar -jcvf "$ARCHIVE_NAME".tar.bz2 "$ARCHIVE_NAME"
- name: Upload for macos
uses: actions/upload-artifact@v1
with:
name: goneovim-macos-x86_64
path: ${{ github.workspace }}/src/github.com/${{ github.repository }}/cmd/goneovim/deploy/${{ env.ARCHIVE_NAME }}.tar.bz2
#################################################################
# MacOS M1
#################################################################
macos-arm64:
needs: [check-new-commit]
strategy:
matrix:
go-version: [1.21.x]
platform: [macos-14]
runs-on: ${{ matrix.platform }}
env:
GOPATH: ${{ github.workspace }}
QT_HOMEBREW: false
QT_API: 5.13.0
QT_VERSION: 5.15.12
QT_DIR: ${{ github.workspace }}/Qt
QT_STATIC: true
QT_DEBUG: false
GO111MODULE: on
QT_QMAKE_DIR: ${{ github.workspace }}/Qt/bin
steps:
- name: Install Go
uses: actions/setup-go@v4
with:
go-version: ${{ matrix.go-version }}
- name: Download pre built Qt
run: |
curl -L -o qt-macos-static-5.15.12.tar.bz2 https:/akiyosi/qt-static-builds/releases/download/macOS-arm64/qt-macos-static-5.15.12.tar.bz2
tar xf qt-macos-static-5.15.12.tar.bz2
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0
path: ${{ github.workspace }}/src/github.com/${{ github.repository }}
- name: Get Qt binding for Go
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}
make qt_bindings
- name: Get dependencies
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}
make deps
- name: Retrieve version
id: version-macos
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}
echo "::set-output name=GONEOVIM_VERSION::$(git describe --tags)"
echo "::set-output name=GONEOVIM_VERSION_HASH::$(git rev-parse HEAD)"
- name: Build
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}
make app
- if: github.event_name == 'workflow_dispatch'
run: echo "ARCHIVE_NAME=goneovim-macos-arm64" >> $GITHUB_ENV
- if: github.event_name == 'schedule'
run: echo "ARCHIVE_NAME=goneovim-macos-arm64" >> $GITHUB_ENV
- if: github.event_name == 'push'
run: echo "ARCHIVE_NAME=goneovim-${{ steps.version-macos.outputs.GONEOVIM_VERSION }}-macos-arm64" >> $GITHUB_ENV
- name: Archive
run: |
cd ${{ github.workspace }}/src/github.com/${{ github.repository }}/cmd/goneovim/deploy
mv darwin "$ARCHIVE_NAME"
tar -jcvf "$ARCHIVE_NAME".tar.bz2 "$ARCHIVE_NAME"
- name: Upload for macos
uses: actions/upload-artifact@v1
with:
name: goneovim-macos-arm64
path: ${{ github.workspace }}/src/github.com/${{ github.repository }}/cmd/goneovim/deploy/${{ env.ARCHIVE_NAME }}.tar.bz2
#################################################################
# Windows
#################################################################
windows:
needs: [check-new-commit]
strategy:
matrix:
go-version: [1.21.0]
platform: [windows-latest]
runs-on: ${{ matrix.platform }}
env:
GOPATH: ${{ github.workspace }}
QT_DIR: ${{ github.workspace }}\Qt
QT_API: 5.13.0
QT_MSYS2: true
QT_MSYS2_DIR: D:\a\_temp\msys64\
QT_MSVC: false
QT_DEBUG: false
GO111MODULE: on
CGO_CFLAGS_ALLOW: ".*"
CGO_CXXFLAGS_ALLOW: ".*"
CGO_LDFLAGS_ALLOW: ".*"
# CGO_ENABLED: 1
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
steps:
- name: Setup MSYS2 and install Qt5
uses: msys2/setup-msys2@v2
with:
update: true
msystem: mingw64
install: mingw-w64-x86_64-toolchain
- shell: msys2 {0}
run: |
pacman --noconfirm -S sed git make zip unzip mingw-w64-x86_64-toolchain mingw-w64-x86_64-qt5 mingw-w64-x86_64-angleproject
- name: Install Go
uses: actions/setup-go@v4
with:
go-version: ${{ matrix.go-version }}
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0
path: ${{ env.GOPATH }}\src\github.com\${{ github.repository }}
- name: Get Qt binding for Go
shell: msys2 {0}
run: |
export PATH=/c/hostedtoolcache/windows/go/${{ matrix.go-version }}/x64/bin/:$PATH
cd /d/a/goneovim/goneovim/src/github.com/${{ github.repository }}
go get -v github.com/akiyosi/qt
go get github.com/akiyosi/qt/internal/[email protected]
go get github.com/akiyosi/qt/internal/binding/files/docs/5.12.0
go get github.com/akiyosi/qt/internal/binding/files/docs/5.13.0
go get github.com/akiyosi/qt/internal/cmd/[email protected]
go install -v -tags=no_env github.com/akiyosi/qt/cmd/...
go mod vendor
git clone https:/akiyosi/env_windows_amd64_513.git vendor/github.com/akiyosi/env_windows_amd64_513
- name: Get Qt binding for Go
shell: msys2 {0}
run: |
export PATH=/c/hostedtoolcache/windows/go/${{ matrix.go-version }}/x64/bin/:$PATH
cd /d/a/goneovim/goneovim/src/github.com/${{ github.repository }}
go get -v github.com/akiyosi/qt
go get github.com/akiyosi/qt/internal/[email protected]
go get github.com/akiyosi/qt/internal/binding/files/docs/5.12.0
go get github.com/akiyosi/qt/internal/binding/files/docs/5.13.0
go get github.com/akiyosi/qt/internal/cmd/[email protected]
go install -v -tags=no_env github.com/akiyosi/qt/cmd/...
go mod vendor
git clone https:/akiyosi/env_windows_amd64_513.git vendor/github.com/akiyosi/env_windows_amd64_513
- name: Generate Qt bindings
if: ${{ steps.cache-qt-bindings-windows-test.outputs.cache-hit != 'true' }}
shell: msys2 {0}
run: |
export PATH=/c/hostedtoolcache/windows/go/${{ matrix.go-version }}/x64/bin/:$PATH
cd /d/a/goneovim/goneovim/src/github.com/${{ github.repository }}
$(go env GOPATH)/bin/qtsetup -test=false
- name: Get dependencies
shell: msys2 {0}
run: |
export PATH=/c/hostedtoolcache/windows/go/${{ matrix.go-version }}/x64/bin/:$PATH
export GOPATH=/d/a/goneovim/goneovim
cd /d/a/goneovim/goneovim/src/github.com/${{ github.repository }}
make deps
- name: Retrieve version
id: version-windows
run: |
cd D:/a/goneovim/goneovim/src/github.com/${{ github.repository }}
echo "::set-output name=GONEOVIM_VERSION::$(git describe --tags)"
- name: Test
shell: msys2 {0}
run: |
export PATH=/c/hostedtoolcache/windows/go/${{ matrix.go-version }}/x64/bin/:$PATH
export GOPATH=/d/a/goneovim/goneovim
cd /d/a/goneovim/goneovim/src/github.com/${{ github.repository }}
make test
- name: Build
shell: msys2 {0}
run: |
export PATH=/c/hostedtoolcache/windows/go/${{ matrix.go-version }}/x64/bin/:$PATH
export GOPATH=/d/a/goneovim/goneovim
cd /d/a/goneovim/goneovim/src/github.com/${{ github.repository }}
make app
- if: github.event_name == 'workflow_dispatch'
run: echo "ARCHIVE_NAME=goneovim-windows" >> $env:GITHUB_ENV
- if: github.event_name == 'schedule'
run: echo "ARCHIVE_NAME=goneovim-windows" >> $env:GITHUB_ENV
- if: github.event_name == 'push'
run: echo "ARCHIVE_NAME=goneovim-${{ steps.version-windows.outputs.GONEOVIM_VERSION }}-windows" >> $env:GITHUB_ENV
- name: Archive
shell: msys2 {0}
run: |
cd D:/a/goneovim/goneovim/src/github.com/${{ github.repository }}/cmd/goneovim/deploy
mv windows ${{ env.ARCHIVE_NAME }}
zip -r ${{ env.ARCHIVE_NAME }}.zip ${{ env.ARCHIVE_NAME }}
- name: Upload
uses: actions/upload-artifact@v1
with:
name: goneovim-windows
path: D:/a/goneovim/goneovim/src/github.com/${{ github.repository }}/cmd/goneovim/deploy/${{ env.ARCHIVE_NAME }}.zip
# freebsd:
# needs: [check-new-commit]
# strategy:
# matrix:
# go-version: [1.21.x]
# platform: [macos-latest]
# runs-on: ${{ matrix.platform }}
# steps:
# - name: Checkout code
# uses: actions/checkout@v3
# with:
# fetch-depth: 0
#
# - name: Retrieve version
# id: version-freebsd
# run: |
# echo "::set-output name=GONEOVIM_VERSION::$(git describe --tags)"
# echo "::set-output name=GONEOVIM_VERSION_HASH::$(git rev-parse HEAD)"
#
# - name: Build for freeBSD
# uses: cross-platform-actions/[email protected]
# env:
# GOPATH: /home/runner/go
# QT_PKG_CONFIG: true
# QT_API: 5.13.0
# QT_DEBUG: false
# QT_STATIC: true
# GO111MODULE: on
# GOPROXY: https://goproxy.io
# CGO_CPPFLAGS: '-O3 -Wno-deprecated'
# with:
# environment_variables: GOPATH QT_PKG_CONFIG QT_API QT_DEBUG QT_STATIC GO111MODULE GOPROXY
# operating_system: freebsd
# architecture: x86_64
# version: '13.2'
# shell: bash
# memory: 12G
# cpu_count: 4
# run: |
# yes | sudo pkg install git go pkgconf
# yes | sudo pkg install devel/qt5
# yes | sudo pkg install gmake
# gmake qt_bindings
# gmake deps
# gmake app
#
# - if: github.event_name == 'workflow_dispatch'
# run: echo "ARCHIVE_NAME=goneovim-freebsd" >> $GITHUB_ENV
# - if: github.event_name == 'schedule'
# run: echo "ARCHIVE_NAME=goneovim-freebsd" >> $GITHUB_ENV
# - if: github.event_name == 'push'
# run: echo "ARCHIVE_NAME=goneovim-${{ steps.version-freebsd.outputs.GONEOVIM_VERSION }}-freebsd" >> $GITHUB_ENV
#
# - name: Archive
# run: |
# cd cmd/goneovim/deploy
# mv freebsd "$ARCHIVE_NAME"
# tar -jcvf "$ARCHIVE_NAME".tar.bz2 "$ARCHIVE_NAME"
#
# - name: Upload
# uses: actions/upload-artifact@v1
# with:
# name: goneovim-freebsd
# path: ${{ github.workspace }}/cmd/goneovim/deploy/${{ env.ARCHIVE_NAME }}.tar.bz2
publish:
# needs: [linux, windows, macos, freebsd]
needs: [linux, windows, macos-x86_64, macos-arm64]
runs-on: ubuntu-20.04
permissions:
contents: write
steps:
- 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=Goneovim Nightly 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=Goneovim $TAG_NAME";
echo 'PRERELEASE=') >> $GITHUB_ENV
- name: Publish
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create $TAG_NAME $PRERELEASE --title "$SUBJECT" --target $GITHUB_SHA /home/runner/work/goneovim/goneovim/goneovim-macos-x86_64/* /home/runner/work/goneovim/goneovim/goneovim-macos-arm64/* /home/runner/work/goneovim/goneovim/goneovim-linux/* /home/runner/work/goneovim/goneovim/goneovim-windows/*