publish uctags #542
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: publish uctags | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: '0 4 * * *' | |
jobs: | |
check: | |
runs-on: ubuntu-latest | |
env: | |
GH_TOKEN: ${{ github.token }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
repository: universal-ctags/ctags | |
- id: check-if-has-new-commit | |
run: | | |
cat > QUERY <<EOF | |
{ | |
repository(owner: "universal-ctags", name: "ctags-nightly-build") { | |
latestRelease { | |
name | |
} | |
} | |
} | |
EOF | |
LATEST_RELEASE_GIT_SHA="$(gh api graphql -f "query=$(cat QUERY)" --jq .data.repository.latestRelease.name | cut -d+ -f2)" | |
printf 'LATEST_RELEASE_GIT_SHA=%s\n' "$LATEST_RELEASE_GIT_SHA" | |
CURRENT_SOURCE_GIT_SHA="$(git rev-parse HEAD)" | |
printf 'CURRENT_SOURCE_GIT_SHA=%s\n' "$CURRENT_SOURCE_GIT_SHA" | |
if [ "$LATEST_RELEASE_GIT_SHA" = "$CURRENT_SOURCE_GIT_SHA" ] ; then | |
printf 'HAS_NEW_COMMIT=no\n' >> "$GITHUB_OUTPUT" | |
else | |
printf 'HAS_NEW_COMMIT=yes\n' >> "$GITHUB_OUTPUT" | |
fi | |
printf 'GIT_SHA=%s\n' "$CURRENT_SOURCE_GIT_SHA" >> "$GITHUB_OUTPUT" | |
outputs: | |
if-has-new-commit: ${{ steps.check-if-has-new-commit.outputs.HAS_NEW_COMMIT }} | |
git-sha: ${{ steps.check-if-has-new-commit.outputs.GIT_SHA }} | |
manpages: | |
needs: check | |
if: needs.check.outputs.if-has-new-commit == 'yes' | |
runs-on: ubuntu-latest | |
steps: | |
- run: pip3 install -U docutils | |
- uses: actions/checkout@v4 | |
with: | |
repository: universal-ctags/ctags | |
ref: ${{ needs.check.outputs.git-sha }} | |
- run: ./autogen.sh | |
- run: ./configure | |
- run: cd man && make V=1 | |
- run: | | |
install -d manpages/man/man1/ | |
install -d manpages/man/man5/ | |
install -d manpages/man/man7/ | |
cp man/*.1 manpages/man/man1/ | |
cp man/*.5 manpages/man/man5/ | |
cp man/*.7 manpages/man/man7/ | |
tar cvJf manpages.tar.xz manpages | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: manpages | |
path: manpages.tar.xz | |
bsd: | |
needs: [check] | |
if: needs.check.outputs.if-has-new-commit == 'yes' | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
# https://ftp.netbsd.org/pub/NetBSD/ | |
# https://cdn.openbsd.org/pub/OpenBSD/ | |
# https://archive.freebsd.org/old-releases/amd64/ | |
target: ['netbsd-9.4-amd64', 'netbsd-9.2-amd64', 'netbsd-9.3-amd64', 'openbsd-7.4-amd64', 'openbsd-7.3-amd64', 'freebsd-13.2-amd64', 'freebsd-13.1-amd64', 'freebsd-13.0-amd64'] | |
steps: | |
- run: curl -LO https://raw.githubusercontent.com/leleliu008/ppkg/master/ppkg | |
- run: chmod a+x ppkg | |
- run: ./ppkg setup | |
- run: ./ppkg update | |
- run: | | |
~/.ppkg/uppm/installed/gsed/bin/gsed -i "/git-url/a git-sha: ${{ needs.check.outputs.git-sha }}" ~/.ppkg/repos.d/official-core/formula/uctags.yml | |
- if: ${{ startsWith(matrix.target, 'openbsd') }} | |
run: ./ppkg install ${{ matrix.target }}/uctags | |
- if: ${{ ! startsWith(matrix.target, 'openbsd') }} | |
run: ./ppkg install ${{ matrix.target }}/uctags --static | |
- run: ./ppkg pack ${{ matrix.target }}/uctags -t tar.gz | |
- run: ./ppkg pack ${{ matrix.target }}/uctags -t tar.xz | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: uctags---${{ matrix.target }}-tar | |
path: uctags-*-${{ matrix.target }}.tar.* | |
macos: | |
needs: check | |
if: needs.check.outputs.if-has-new-commit == 'yes' | |
runs-on: macos-14 | |
strategy: | |
fail-fast: false | |
matrix: | |
target-version: ['10.15', '11.0', '12.0', '13.0', '14.0'] | |
target-arch: [x86_64, arm64] | |
steps: | |
- run: curl -LO https://raw.githubusercontent.com/leleliu008/ppkg/master/ppkg | |
- run: chmod a+x ppkg | |
- run: ./ppkg setup | |
- run: ./ppkg update | |
- run: | | |
~/.ppkg/uppm/installed/gsed/bin/gsed -i "/git-url/a git-sha: ${{ needs.check.outputs.git-sha }}" ~/.ppkg/repos.d/official-core/formula/uctags.yml | |
- run: ./ppkg install macos-${{ matrix.target-version }}-${{ matrix.target-arch }}/uctags | |
- run: ./ppkg pack macos-${{ matrix.target-version }}-${{ matrix.target-arch }}/uctags -t tar.gz | |
- run: ./ppkg pack macos-${{ matrix.target-version }}-${{ matrix.target-arch }}/uctags -t tar.xz | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: uctags-macos-${{ matrix.target-version }}-${{ matrix.target-arch }}-tar | |
path: uctags-*.tar.* | |
linux: | |
needs: [check] | |
if: needs.check.outputs.if-has-new-commit == 'yes' | |
strategy: | |
fail-fast: false | |
matrix: | |
target-arch: [x86_64, aarch64] | |
runs-on: ubuntu-latest | |
steps: | |
- run: | | |
cat > run.sh <<EOF | |
set -e | |
COLOR_GREEN='\033[0;32m' # Green | |
COLOR_PURPLE='\033[0;35m' # Purple | |
COLOR_OFF='\033[0m' # Reset | |
echo() { | |
printf '%b\n' "\$*" | |
} | |
run() { | |
echo "\${COLOR_PURPLE}==>\${COLOR_OFF} \${COLOR_GREEN}\$@\${COLOR_OFF}" | |
eval "\$*" | |
} | |
run uname -a | |
run apk update | |
run apk add g++ libc-dev linux-headers | |
run wget https://raw.githubusercontent.com/leleliu008/ppkg/master/ppkg | |
run chmod a+x ppkg | |
run ./ppkg setup | |
run ./ppkg update | |
sed -i "/git-url/a git-sha: ${{ needs.check.outputs.git-sha }}" ~/.ppkg/repos.d/official-core/formula/uctags.yml | |
run ./ppkg install uctags --static | |
run ./ppkg pack uctags -t tar.gz | |
run ./ppkg pack uctags -t tar.xz | |
EOF | |
chmod +x run.sh | |
# https://github.com/multiarch/qemu-user-static | |
- if: matrix.target-arch != 'x86_64' | |
run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
- if: matrix.target-arch == 'x86_64' | |
run: docker run -v $PWD:$PWD -w $PWD --name alpine alpine sh run.sh | |
- if: matrix.target-arch == 'aarch64' | |
run: docker run -v $PWD:$PWD -w $PWD --name alpine arm64v8/alpine sh run.sh | |
- run: ls | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: uctags---linux-${{ matrix.target-arch }}-tar | |
path: uctags-*-linux-${{ matrix.target-arch }}.tar.* | |
deb: | |
needs: [check, linux] | |
if: needs.check.outputs.if-has-new-commit == 'yes' | |
strategy: | |
fail-fast: false | |
matrix: | |
target-arch: [x86_64, aarch64] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: uctags---linux-${{ matrix.target-arch }}-tar | |
path: . | |
- run: install -d ~/.ppkg/installed/linux-musl-${{ matrix.target-arch }}/uctags | |
- run: tar xvf uctags-*-linux-${{ matrix.target-arch }}.tar.xz -C ~/.ppkg/installed/linux-musl-${{ matrix.target-arch }}/uctags --strip-components=1 | |
- run: curl -LO https://raw.githubusercontent.com/leleliu008/ppkg/master/ppkg | |
- run: chmod a+x ppkg | |
- run: ./ppkg setup | |
- run: ./ppkg export.deb linux-musl-${{ matrix.target-arch }}/uctags -o . | |
- if: matrix.target-arch == 'x86_64' | |
run: sudo dpkg -i *.deb | |
- if: matrix.target-arch == 'x86_64' | |
run: dpkg -L uctags | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: uctags---linux-${{ matrix.target-arch }}-deb | |
path: uctags-*-linux-${{ matrix.target-arch }}.deb | |
rpm: | |
needs: [check, linux] | |
if: needs.check.outputs.if-has-new-commit == 'yes' | |
strategy: | |
fail-fast: false | |
matrix: | |
target-arch: [x86_64] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: uctags---linux-${{ matrix.target-arch }}-tar | |
path: . | |
- run: | | |
cat > run.sh <<EOF | |
set -e | |
COLOR_GREEN='\033[0;32m' # Green | |
COLOR_PURPLE='\033[0;35m' # Purple | |
COLOR_OFF='\033[0m' # Reset | |
echo() { | |
printf '%b\n' "\$*" | |
} | |
run() { | |
echo "\${COLOR_PURPLE}==>\${COLOR_OFF} \${COLOR_GREEN}\$@\${COLOR_OFF}" | |
eval "\$*" | |
} | |
run uname -a | |
run dnf -y install curl xz g++ rpmdevtools rpmlint | |
run install -d ~/.ppkg/installed/linux-musl-${{ matrix.target-arch }}/uctags | |
run tar xvf uctags-*-linux-${{ matrix.target-arch }}.tar.xz -C ~/.ppkg/installed/linux-musl-${{ matrix.target-arch }}/uctags --strip-components=1 | |
run curl -LO https://raw.githubusercontent.com/leleliu008/ppkg/master/ppkg | |
run chmod a+x ppkg | |
run ./ppkg setup | |
run ./ppkg export.rpm linux-musl-${{ matrix.target-arch }}/uctags -o . | |
run rpm -i *.rpm | |
run rpm -ql uctags | |
EOF | |
chmod +x run.sh | |
# https://github.com/multiarch/qemu-user-static | |
- if: matrix.target-arch != 'x86_64' | |
run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
- if: matrix.target-arch == 'x86_64' | |
run: docker run -v $PWD:$PWD -w $PWD --name fedora fedora sh run.sh | |
- if: matrix.target-arch == 'aarch64' | |
run: docker run -v $PWD:$PWD -w $PWD --name fedora arm64v8/fedora sh run.sh | |
- run: ls | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: uctags---${{ matrix.target-arch }}-rpm | |
path: uctags-*.${{ matrix.target-arch }}.rpm | |
apk: | |
needs: [check, linux] | |
if: needs.check.outputs.if-has-new-commit == 'yes' | |
strategy: | |
fail-fast: false | |
matrix: | |
target-arch: [x86_64, aarch64] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: uctags---linux-${{ matrix.target-arch }}-tar | |
path: . | |
- run: | | |
cat > run.sh <<EOF | |
set -e | |
COLOR_GREEN='\033[0;32m' # Green | |
COLOR_PURPLE='\033[0;35m' # Purple | |
COLOR_OFF='\033[0m' # Reset | |
echo() { | |
printf '%b\n' "\$*" | |
} | |
run() { | |
echo "\${COLOR_PURPLE}==>\${COLOR_OFF} \${COLOR_GREEN}\$@\${COLOR_OFF}" | |
eval "\$*" | |
} | |
run uname -a | |
run apk update | |
run apk add xz alpine-sdk | |
run openssl genrsa -out uctags.rsa 2048 | |
run openssl rsa -in uctags.rsa -pubout -out uctags.rsa.pub | |
run cp uctags.rsa.pub /etc/apk/keys/ | |
run install -d ~/.abuild/ | |
printf 'PACKAGER_PRIVKEY="%s"\n' "\$PWD/uctags.rsa" > ~/.abuild/abuild.conf | |
run install -d ~/.ppkg/installed/linux-musl-${{ matrix.target-arch }}/uctags | |
run tar xvf uctags-*-linux-${{ matrix.target-arch }}.tar.xz -C ~/.ppkg/installed/linux-musl-${{ matrix.target-arch }}/uctags --strip-components=1 | |
run wget https://raw.githubusercontent.com/leleliu008/ppkg/master/ppkg | |
run chmod a+x ppkg | |
run ./ppkg setup | |
run ./ppkg export.apk uctags -o . | |
run apk add *.apk | |
run apk info -L uctags | |
EOF | |
chmod +x run.sh | |
# https://github.com/multiarch/qemu-user-static | |
- if: matrix.target-arch != 'x86_64' | |
run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
- if: matrix.target-arch == 'x86_64' | |
run: docker run -v $PWD:$PWD -w $PWD --name fedora alpine sh run.sh | |
- if: matrix.target-arch == 'aarch64' | |
run: docker run -v $PWD:$PWD -w $PWD --name fedora arm64v8/alpine sh run.sh | |
- run: ls | |
- run: | | |
set -ex | |
X="$(ls uctags-*-linux-${{ matrix.target-arch }}.tar.xz)" | |
Y="${X%.tar.xz}" | |
Z="$Y.apk" | |
mv uctags-*.apk "$Z" | |
mv uctags.rsa.pub "$Z.rsa.pub" | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: uctags---${{ matrix.target-arch }}-apk | |
path: uctags-*-${{ matrix.target-arch }}.apk | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: uctags---${{ matrix.target-arch }}-apk-rsa-pub | |
path: uctags-*-${{ matrix.target-arch }}.apk.rsa.pub | |
pkg: | |
needs: [check, linux] | |
if: needs.check.outputs.if-has-new-commit == 'yes' | |
strategy: | |
fail-fast: false | |
matrix: | |
target-arch: [x86_64] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: uctags---linux-${{ matrix.target-arch }}-tar | |
path: . | |
- run: | | |
cat > run.sh <<EOF | |
run() { | |
printf '%b\n' "\$*" | |
eval "\$@" | |
} | |
set -e | |
run install -d ~/.ppkg/installed/linux-musl-${{ matrix.target-arch }}/uctags | |
run tar xvf uctags-*-linux-${{ matrix.target-arch }}.tar.xz -C ~/.ppkg/installed/linux-musl-${{ matrix.target-arch }}/uctags --strip-components=1 | |
run curl -LO https://raw.githubusercontent.com/leleliu008/ppkg/master/ppkg | |
run chmod a+x ppkg | |
run ./ppkg setup | |
run ./ppkg export.pkg linux-musl-${{ matrix.target-arch }}/uctags | |
run sudo pacman -U --noconfirm *.pkg.tar.xz | |
run pacman -Qi uctags | |
EOF | |
- run: | | |
cat > Dockerfile <<EOF | |
FROM archlinux | |
ARG UID | |
ARG GID | |
RUN pacman -Syy --noconfirm && \ | |
pacman -S sudo curl openssl gcc fakeroot --noconfirm && \ | |
groupadd --gid \$GID leleliu008 && \ | |
useradd --gid \$GID --uid \$UID -m leleliu008 && \ | |
echo 'leleliu008 ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers | |
USER leleliu008 | |
EOF | |
- run: docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) -t myarchlinux . | |
- run: docker run -v $PWD:/home/leleliu008/w -w /home/leleliu008/w --name myarchlinux myarchlinux sh run.sh | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: uctags---${{ matrix.target-arch }}-pkg | |
path: uctags-*-${{ matrix.target-arch }}.pkg.tar.xz | |
android: | |
needs: check | |
if: needs.check.outputs.if-has-new-commit == 'yes' | |
runs-on: ubuntu-latest | |
container: fpliu/ndk-pkg | |
steps: | |
- run: ndk-pkg setup | |
- run: ndk-pkg update | |
- run: | | |
printf "git-sha: ${{ needs.check.outputs.git-sha }}\n" >> ~/.ndk-pkg/repos.d/official-core/formula/uctags.yml | |
- run: ndk-pkg install android-34-arm64-v8a,armeabi-v7a,x86_64,x86/uctags --fsle | |
- run: ndk-pkg pack android-34-arm64-v8a/uctags | |
- run: ndk-pkg pack android-34-armeabi-v7a/uctags | |
- run: ndk-pkg pack android-34-x86_64/uctags | |
- run: ndk-pkg pack android-34-x86/uctags | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: uctags---android | |
path: uctags-*-android-*.tar.* | |
publish: | |
needs: [check, manpages, bsd, macos, android, linux, deb, rpm, apk, pkg] | |
if: needs.check.outputs.if-has-new-commit == 'yes' | |
runs-on: ubuntu-latest | |
env: | |
GH_TOKEN: ${{ github.token }} | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: '*' | |
path: . | |
merge-multiple: true | |
- run: ls -a | |
- name: repack | |
run: | | |
set -x | |
for FILENAME in uctags-*.tar.* | |
do | |
case $FILENAME in | |
*.pkg.tar.xz) | |
;; | |
*) | |
DIR_NAME="${FILENAME%.tar.*}" | |
tar xvf "$FILENAME" | |
tar xvf manpages.tar.xz -C "$DIR_NAME" --strip-components=1 | |
case $FILENAME in | |
*.tar.gz) FMT='--gzip' ;; | |
*.tar.xz) FMT='--xz' ;; | |
esac | |
tar -c -v "$FMT" -f "$FILENAME" "$DIR_NAME" | |
esac | |
done | |
- run: | | |
printf 'build-from: https://github.com/universal-ctags/ctags/tree/%s\n\n' ${{ needs.check.outputs.git-sha }} > notes.md | |
printf 'sha256sum:\n```\n%s\n```\n' "$(sha256sum uctags-*.tar.* *.deb *.rpm *.apk *.rsa.pub)" >> notes.md | |
VERSION="$(ls uctags-*-linux-x86_64.tar.xz | cut -d- -f2)" | |
TAGNAME="$VERSION+${{ needs.check.outputs.git-sha }}" | |
# to avaid: failed to run git: fatal: not a git repository (or any of the parent directories): .git | |
git -c init.defaultBranch=master init | |
git remote add origin ${{ github.repositoryUrl }} | |
gh release create "$TAGNAME" uctags-*.tar.* *.deb *.rpm *.apk *.rsa.pub --title "$TAGNAME" --notes-file notes.md |