Skip to content

publish uctags

publish uctags #527

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 --link-type=static-most
- if: ${{ ! startsWith(matrix.target, 'openbsd') }}
run: ./ppkg install ${{ matrix.target }}/uctags --link-type=static-full
- 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 --link-type=static-most
- 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 --link-type=static-full
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