kstr0k build AppImage #46
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: kstr0k build AppImage | |
on: | |
# schedule: | |
# - cron: '0 0 * * *' | |
workflow_dispatch: | |
inputs: | |
vim_tag: | |
description: 'Vim tag to build (empty=latest)' | |
default: '' | |
env: | |
MYOWNER: ${{ github.repository_owner }} | |
MYREPO: ${{ github.event.repository.name }} | |
jobs: | |
get-tags-job: | |
runs-on: ubuntu-latest | |
outputs: | |
updated: ${{ steps.output-tags.outputs.updated }} | |
prev_vim_tag: ${{ steps.output-tags.outputs.prev_vim_tag }} | |
vim_tag: ${{ steps.output-tags.outputs.vim_tag }} | |
release_tag: ${{ steps.output-tags.outputs.release_tag }} | |
steps: | |
- name: Get latest tags | |
id: query-tags | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
GQL_Q1: | | |
query($myowner: String!, $myrepo: String!) { | |
appimage: repository(owner: $myowner, name: $myrepo) { | |
releases(first: 1, orderBy: { field: CREATED_AT, direction: DESC }) { | |
nodes { name } | |
} | |
} | |
vim: repository(owner: "vim", name: "vim") { | |
refs(refPrefix: "refs/tags/", last: 1) { | |
edges { node { name } } | |
} | |
} | |
} | |
jq_extract: >- | |
"vim_tag=" + .data.vim.refs.edges[0].node.name, | |
"prev_release_name<<_EOVAL_\n" + .data.appimage.releases.nodes[0].name + "\n_EOVAL_" | |
run: | | |
gh api graphql -F myowner="$MYOWNER" -F myrepo="$MYREPO" \ | |
-f query="$GQL_Q1" --jq "$jq_extract" | tee -a "$GITHUB_ENV" | |
- name: Output tags | |
id: output-tags | |
run: | | |
vim_forced_tag=${{ github.event.inputs.vim_tag }} | |
if [ -n "${vim_forced_tag}" ]; then | |
vim_tag=$vim_forced_tag | |
fi | |
prev_vim_tag=$(printf '%s' "$prev_release_name" | sed -ne 's@.* \(v[1-9][0-9.]\+\).*@\1@p;q') | |
tee -a "$GITHUB_OUTPUT" <<EOGHO | |
prev_vim_tag=${prev_vim_tag} | |
vim_tag=${vim_tag} | |
release_tag=${vim_tag}-kstr0k-appimage | |
updated=$([ ${prev_vim_tag} != ${vim_tag} ] && echo true) | |
EOGHO | |
create-appimage-job: | |
runs-on: ubuntu-22.04 | |
needs: get-tags-job | |
if: needs.get-tags-job.outputs.updated == 'true' | |
env: | |
CC: gcc | |
vim_tag: '${{ needs.get-tags-job.outputs.vim_tag }}' | |
prev_vim_tag: '${{ needs.get-tags-job.outputs.prev_vim_tag }}' | |
release_tag: '${{ needs.get-tags-job.outputs.release_tag }}' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check release tag available | |
run: | | |
! git rev-parse "${release_tag}^{tag}" | |
- name: Install packages | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
run: | | |
sudo bash -e scripts/install-distro-build-deps.sh | |
- name: Update Vim | |
run: | | |
git submodule update --init --depth 10 vim | |
cd vim | |
since=$(git log -1 --pretty=%cd @~1) | |
git fetch -j2 --shallow-since="$since" --no-tags origin tag "${vim_tag}" tag "${prev_vim_tag}" | |
git switch --detach "${vim_tag}" | |
git log --pretty=oneline --abbrev-commit "${prev_vim_tag}^..@" | |
- name: Set up system | |
run: | | |
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0 | |
sudo bash vim/ci/setup-xvfb.sh | |
- name: Download tools | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
mkdir -p build; cd build | |
gh release download continuous -R AppImage/appimagetool \ | |
-p appimagetool-x86_64.AppImage -O appimagetool | |
gh release download continuous -R linuxdeploy/linuxdeploy \ | |
-p linuxdeploy-x86_64.AppImage -O linuxdeploy.appimage | |
# gh api -H 'Accept: application/vnd.github.raw' \ | |
# '/repos/linuxdeploy/linuxdeploy-plugin-gtk/contents/linuxdeploy-plugin-gtk.sh' | |
# undocumented 'raw' but 'raw+json' returns base64 | |
chmod u+x * | |
- name: Build Vim | |
run: | | |
bash -e scripts/build_vim.sh | |
- name: Vim Version | |
run: | | |
vim/src/vim/vim --version | |
vim/src/gvim/vim --version | |
- name: Test Vim | |
env: | |
TERM: xterm | |
DISPLAY: ':99' | |
timeout-minutes: 20 | |
run: | | |
make -C vim/src/gvim test | |
- name: Dump failed screen tests | |
run: | | |
bash scripts/dump_failed_screentests.sh | |
- name: Create GVim and Vim AppImage | |
run: | | |
bash -e scripts/appimage.sh GVim Vim | |
- name: Commit and push | |
id: commit | |
run: | | |
vim_summary=$(git submodule summary vim) | |
workflow_url=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID} | |
git config --local user.name 'github-actions[bot]' | |
git config --local user.email 'github-actions[bot]@users.noreply.github.com' | |
git remote set-url origin "https://github-actions:${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY}" | |
git commit -m "Vim: ${vim_tag}" -m "${vim_summary}" -m "${workflow_url}" vim | |
git tag -f "${release_tag}" # release tag | |
git push --atomic -u origin "${GITHUB_REF_NAME}" "${release_tag}" | |
- name: Release | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
release_tag: ${{ needs.get-tags-job.outputs.release_tag }} | |
run: | | |
gh release create "$release_tag" \ | |
*.AppImage *.zsync \ | |
-F release.body -t "vim-appimage: $release_tag" | |
printf '%s' 'Latest release: ' | |
gh api 'repos/{owner}/{repo}/releases/latest' --jq '.html_url' || : |