Add the 'jcmd' command to replace 'jps'. #25
This file contains hidden or 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: build async-profiler | ||
Check failure on line 1 in .github/workflows/build-async-profiler.yml
|
||
on: | ||
workflow_dispatch: | ||
inputs: | ||
async-profiler-tag-name: | ||
description: 'Enter the async-profiler tag name in https://github.com/async-profiler/async-profiler/tags(e.g. v2.9) please.' | ||
type: string | ||
required: true | ||
jobs: | ||
build-mac: | ||
runs-on: macos-12 | ||
if: ${{ inputs.async-profiler-tag-name }} | ||
steps: | ||
# 检出 async-profiler/async-profiler 项目指定的 tag | ||
- uses: actions/checkout@v3 | ||
with: | ||
repository: async-profiler/async-profiler | ||
fetch-depth: 0 | ||
- name: Checkout the async-profiler repository by input tag name ${{ inputs.async-profiler-tag-name }} | ||
run: git checkout ${{ inputs.async-profiler-tag-name }} | ||
# 安装 Liberica JDK 11 | ||
- uses: actions/setup-java@v3 | ||
with: | ||
distribution: "liberica" | ||
java-version: "11" | ||
# 从 async-profiler 源码编译出 libasyncProfiler-mac.dylib(兼容 arthas-core 中 ProfilerCommand.java 固定的 so 文件名称未使用 libasyncProfiler.dylib) | ||
# grep -m1 PROFILER_VERSION Makefile 用于输出 async-profiler 版本, 下同 | ||
- name: Execute compile inside macOS 12 environment | ||
run: | | ||
grep -m1 PROFILER_VERSION Makefile | ||
echo "JAVA_HOME=${JAVA_HOME}" | ||
java -version | ||
echo "FAT_BINARY variable that make libasyncProfiler-mac.dylib works both on macOS x86-64 and arm64" | ||
make FAT_BINARY=true | ||
LIB_PROFILER_PATH=$(find build -type f \( -name libasyncProfiler.so -o -name libasyncProfiler.dylib \) 2>/dev/null) | ||
[ -z "${LIB_PROFILER_PATH}" ] && echo "Can not find libasyncProfiler.so or libasyncProfiler.dylib file under build directory." && exit 1 | ||
echo "LIB_PROFILER_PATH=${LIB_PROFILER_PATH}" | ||
file ${LIB_PROFILER_PATH} | ||
otool -L ${LIB_PROFILER_PATH} | ||
cp ${LIB_PROFILER_PATH} libasyncProfiler-mac.dylib | ||
# 暂存编译出来的 libasyncProfiler-mac.dylib 文件 | ||
- uses: actions/upload-artifact@v3 | ||
with: | ||
name: async-profiler | ||
path: libasyncProfiler-mac.dylib | ||
if-no-files-found: error | ||
build-generic-linux-x64: | ||
runs-on: ubuntu-20.04 | ||
if: ${{ inputs.async-profiler-tag-name }} | ||
steps: | ||
# 检出 async-profiler/async-profiler 项目指定的 tag | ||
- uses: actions/checkout@v3 | ||
with: | ||
repository: async-profiler/async-profiler | ||
fetch-depth: 0 | ||
- name: Checkout the async-profiler repository by input tag name ${{ inputs.async-profiler-tag-name }} | ||
run: git checkout ${{ inputs.async-profiler-tag-name }} | ||
# 从 async-profiler 源码编译出适用于 glibc-based Linux 主机的 libasyncProfiler-linux-x64.so | ||
- name: Execute compile inside CentOS 6 x86_64 docker container environment | ||
uses: uraimo/run-on-arch-action@v2 | ||
with: | ||
arch: none | ||
distro: none | ||
base_image: amd64/centos:6.10 | ||
run: | | ||
cat /etc/system-release | ||
uname -m | ||
minorver=6.10 | ||
sed -e "s|^mirrorlist=|#mirrorlist=|g" \ | ||
-e "s|^#baseurl=http://mirror.centos.org/centos/\$releasever|baseurl=https://mirrors.aliyun.com/centos-vault/$minorver|g" \ | ||
-i.bak /etc/yum.repos.d/CentOS-*.repo | ||
yum -y update && yum install -y wget | ||
wget --no-check-certificate https://people.centos.org/tru/devtools-1.1/devtools-1.1.repo -O /etc/yum.repos.d/devtools-1.1.repo | ||
yum install -y devtoolset-1.1-gcc devtoolset-1.1-gcc-c++ devtoolset-1.1-binutils | ||
export CC=/opt/centos/devtoolset-1.1/root/usr/bin/gcc | ||
export CPP=/opt/centos/devtoolset-1.1/root/usr/bin/cpp | ||
export CXX=/opt/centos/devtoolset-1.1/root/usr/bin/c++ | ||
ln -sf /opt/centos/devtoolset-1.1/root/usr/bin/* /usr/local/bin/ | ||
hash -r | ||
wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz -O openjdk-11.tar.gz | ||
tar zxf openjdk-11.tar.gz | ||
mv jdk-11.0.2 /usr/local/ | ||
export JAVA_HOME=/usr/local/jdk-11.0.2 | ||
export PATH=${JAVA_HOME}/bin:${PATH} | ||
java -version | ||
which java | ||
grep -m1 PROFILER_VERSION Makefile | ||
make | ||
LIB_PROFILER_PATH=$(find build -type f -name libasyncProfiler.so 2>/dev/null) | ||
[ -z "${LIB_PROFILER_PATH}" ] && echo "Can not find libasyncProfiler.so file under build directory." && exit 1 | ||
echo "LIB_PROFILER_PATH=${LIB_PROFILER_PATH}" | ||
file ${LIB_PROFILER_PATH} | ||
ldd ${LIB_PROFILER_PATH} | ||
cp ${LIB_PROFILER_PATH} libasyncProfiler-linux-x64.so | ||
# 暂存编译出来的 libasyncProfiler-linux-x64.so 文件 | ||
- uses: actions/upload-artifact@v3 | ||
with: | ||
name: async-profiler | ||
path: libasyncProfiler-linux-x64.so | ||
if-no-files-found: error | ||
build-generic-linux-arm64: | ||
runs-on: ubuntu-20.04 | ||
if: ${{ inputs.async-profiler-tag-name }} | ||
steps: | ||
# 检出 async-profiler/async-profiler 项目指定的 tag | ||
- uses: actions/checkout@v3 | ||
with: | ||
repository: async-profiler/async-profiler | ||
fetch-depth: 0 | ||
- name: Checkout the async-profiler repository by input tag name ${{ inputs.async-profiler-tag-name }} | ||
run: git checkout ${{ inputs.async-profiler-tag-name }} | ||
# 从 async-profiler 源码编译出适用于 glibc-based Linux 主机的 libasyncProfiler-linux-arm64.so | ||
- name: Execute compile inside CentOS 7 aarch64 docker container environment via QEMU | ||
uses: uraimo/run-on-arch-action@v2 | ||
with: | ||
arch: none | ||
distro: none | ||
base_image: arm64v8/centos:7 | ||
run: | | ||
cat /etc/system-release | ||
uname -m | ||
yum -y update && yum install -y java-11-openjdk-devel gcc-c++ make which file | ||
JAVA_HOME=/usr/lib/jvm/java-11-openjdk | ||
java -version | ||
which java | ||
grep -m1 PROFILER_VERSION Makefile | ||
make | ||
LIB_PROFILER_PATH=$(find build -type f -name libasyncProfiler.so 2>/dev/null) | ||
[ -z "${LIB_PROFILER_PATH}" ] && echo "Can not find libasyncProfiler.so file under build directory." && exit 1 | ||
echo "LIB_PROFILER_PATH=${LIB_PROFILER_PATH}" | ||
file ${LIB_PROFILER_PATH} | ||
ldd ${LIB_PROFILER_PATH} | ||
cp ${LIB_PROFILER_PATH} libasyncProfiler-linux-arm64.so | ||
# 暂存编译出来的 libasyncProfiler-linux-arm64.so 文件 | ||
- uses: actions/upload-artifact@v3 | ||
with: | ||
name: async-profiler | ||
path: libasyncProfiler-linux-arm64.so | ||
if-no-files-found: error | ||
upload-libasyncProfiler-files: | ||
runs-on: ubuntu-20.04 | ||
needs: [build-mac, build-generic-linux-x64, build-generic-linux-arm64, build-alpine-linux-x64, build-alpine-linux-arm64] | ||
steps: | ||
# 检出当前 arthas 代码仓库 | ||
- name: Checkout arthas upstream repo | ||
uses: actions/checkout@v3 | ||
# 将上面编译任务暂存的 libasyncProfiler 动态链接库文件上传到此工作流的 artifact 包中 | ||
- uses: actions/download-artifact@v3 | ||
with: | ||
name: async-profiler | ||
path: tmp-async-profiler | ||
# 查看上面编译任务暂存的 libasyncProfiler 动态链接库文件 | ||
- name: Modify permissions and Display structure of downloaded files | ||
run: | | ||
chmod 755 libasyncProfiler-* | ||
ls -lrt | ||
working-directory: tmp-async-profiler | ||
# 将编译好的 libasyncProfiler 动态链接库文件 push 到 arthas 代码仓库的 master 分支 async-profiler/ 目录下 | ||
- name: Commit and Push libasyncProfiler files | ||
run: | | ||
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" | ||
git config --local user.name "github-actions[bot]" | ||
mv tmp-async-profiler/* async-profiler/ | ||
git add async-profiler/ | ||
git commit -m "Upload arthas async-profiler libs" | ||
- name: Push changes | ||
uses: ad-m/github-push-action@master | ||
with: | ||
github_token: ${{ secrets.GITHUB_TOKEN }} | ||
branch: ${{ github.ref }} | ||
force: true |