Merge pull request #6425 from multiversx/dynamic-roles-fix #938
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: Create release | |
on: | |
push: | |
branches: | |
- master | |
- rc/* | |
workflow_dispatch: | |
permissions: | |
contents: write | |
pull-requests: write | |
jobs: | |
build: | |
strategy: | |
matrix: | |
runs-on: [ubuntu-latest, macos-13, macos-13-xlarge] | |
runs-on: ${{ matrix.runs-on }} | |
name: Build | |
steps: | |
- name: Set up Go 1.20.7 | |
uses: actions/setup-go@v3 | |
with: | |
go-version: 1.20.7 | |
id: go | |
- name: Check out code into the Go module directory | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: "0" | |
- name: Get dependencies | |
run: | | |
go get -v -t -d ./... | |
if [ -f Gopkg.toml ]; then | |
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh | |
dep ensure | |
fi | |
# https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable | |
- name: Set environment variables | |
run: | | |
APP_VER_SHORT=$(git describe --tags) | |
GOOS=$(go env GOOS) | |
GOARCH=$(go env GOARCH) | |
GOPATH=$(go env GOPATH) | |
ARCHIVE="multiversx_""$APP_VER_SHORT""_""$GOOS""_""$GOARCH"".zip" | |
BUILD_DIR=${GITHUB_WORKSPACE}/build | |
VM_GO_VERSION=$(cat go.mod | grep mx-chain-vm-go | sort -n | tail -n -1| awk -F '/' '{print$3}'| sed 's/ /@/g') | |
VM_GO_DIR=${GOPATH}/pkg/mod/github.com/multiversx/${VM_GO_VERSION} | |
echo "GOOS=${GOOS}" >> $GITHUB_ENV | |
echo "GOARCH=${GOARCH}" >> $GITHUB_ENV | |
echo "ARCHIVE=${ARCHIVE}" >> $GITHUB_ENV | |
echo "BUILD_DIR=${BUILD_DIR}" >> $GITHUB_ENV | |
echo "VM_GO_VERSION=${VM_GO_VERSION}" >> $GITHUB_ENV | |
echo "VM_GO_DIR=${VM_GO_DIR}" >> $GITHUB_ENV | |
- name: Build | |
run: | | |
mkdir -p ${BUILD_DIR} | |
cd ${GITHUB_WORKSPACE}/cmd/node && go build -o "${BUILD_DIR}/node" -a -ldflags="-X main.appVersion=${APP_VER}" | |
cd ${GITHUB_WORKSPACE}/cmd/seednode && go build -o "${BUILD_DIR}/seednode" -a -ldflags="-X main.appVersion=${APP_VER}" | |
cd ${GITHUB_WORKSPACE}/cmd/keygenerator && go build -o "${BUILD_DIR}/keygenerator" -a -ldflags="-X main.appVersion=${APP_VER}" | |
cd ${GITHUB_WORKSPACE}/cmd/logviewer && go build -o "${BUILD_DIR}/logviewer" -a -ldflags="-X main.appVersion=${APP_VER}" | |
cd ${GITHUB_WORKSPACE}/cmd/termui && go build -o "${BUILD_DIR}/termui" -a -ldflags="-X main.appVersion=${APP_VER}" | |
- name: Package | |
run: | | |
cd ${GITHUB_WORKSPACE} | |
if [[ "$GOOS" == linux && "$GOARCH" == amd64 ]]; then | |
cp --verbose --no-preserve=mode,ownership ${VM_GO_DIR}/wasmer2/libvmexeccapi.so ${BUILD_DIR}/libvmexeccapi.so | |
cp --verbose --no-preserve=mode,ownership ${VM_GO_DIR}/wasmer/libwasmer_linux_amd64.so ${BUILD_DIR}/libwasmer_linux_amd64.so | |
fi | |
# Actually, there's no runner for this combination (as of March 2024). | |
if [[ "$GOOS" == linux && "$GOARCH" == arm64 ]]; then | |
cp --verbose --no-preserve=mode,ownership ${VM_GO_DIR}/wasmer2/libvmexeccapi_arm.so ${BUILD_DIR}/libvmexeccapi_arm.so | |
cp --verbose --no-preserve=mode,ownership ${VM_GO_DIR}/wasmer/libwasmer_linux_arm64_shim.so ${BUILD_DIR}/libwasmer_linux_arm64_shim.so | |
fi | |
if [[ "$GOOS" == darwin && "$GOARCH" == amd64 ]]; then | |
cp -v ${VM_GO_DIR}/wasmer2/libvmexeccapi.dylib ${BUILD_DIR}/libvmexeccapi.dylib | |
cp -v ${VM_GO_DIR}/wasmer/libwasmer_darwin_amd64.dylib ${BUILD_DIR}/libwasmer_darwin_amd64.dylib | |
fi | |
if [[ "$GOOS" == darwin && "$GOARCH" == arm64 ]]; then | |
cp -v ${VM_GO_DIR}/wasmer2/libvmexeccapi_arm.dylib ${BUILD_DIR}/libvmexeccapi_arm.dylib | |
cp -v ${VM_GO_DIR}/wasmer/libwasmer_darwin_arm64_shim.dylib ${BUILD_DIR}/libwasmer_darwin_arm64_shim.dylib | |
fi | |
if [[ "$GOOS" == linux ]]; then | |
patchelf --set-rpath "\$ORIGIN" ${BUILD_DIR}/node | |
patchelf --set-rpath "\$ORIGIN" ${BUILD_DIR}/seednode | |
ldd ${BUILD_DIR}/node | |
ldd ${BUILD_DIR}/seednode | |
fi | |
if [[ "$GOOS" == darwin ]]; then | |
install_name_tool -add_rpath "@loader_path" ${BUILD_DIR}/node | |
install_name_tool -add_rpath "@loader_path" ${BUILD_DIR}/seednode | |
otool -L ${BUILD_DIR}/node | |
otool -L ${BUILD_DIR}/seednode | |
fi | |
- name: Smoke test | |
run: | | |
# Remove all downloaded Go packages, so that we can test the binary's independence from them (think of Wasmer libraries). | |
sudo rm -rf ${GOPATH}/pkg/mod | |
# Test binaries in different current directories. | |
cd ${BUILD_DIR} && ./node --version | |
cd ${GITHUB_WORKSPACE} && ${BUILD_DIR}/node --version | |
cd / && ${BUILD_DIR}/node --version | |
cd ${BUILD_DIR} && ./seednode --version | |
cd ${GITHUB_WORKSPACE} && ${BUILD_DIR}/seednode --version | |
cd / && ${BUILD_DIR}/seednode --version | |
- name: Package build output | |
run: | | |
sudo chown -R $USER: ${BUILD_DIR} | |
chmod -R 755 ${BUILD_DIR} | |
ls -al ${BUILD_DIR} | |
zip -r -j ${ARCHIVE} ${BUILD_DIR} | |
- name: Save artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.ARCHIVE }} | |
path: ${{ env.ARCHIVE }} | |
if-no-files-found: error | |
release: | |
needs: [build] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v2 | |
# https://docs.github.com/en/free-pro-team@latest/actions/guides/storing-workflow-data-as-artifacts#downloading-or-deleting-artifacts | |
# A directory for each artifact is created using its name | |
- name: Download all workflow run artifacts | |
uses: actions/download-artifact@v2 | |
with: | |
path: assets | |
- name: Display structure of downloaded files | |
run: ls -R | |
working-directory: assets | |
- name: Create release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
gh release create --draft --notes="Release draft from Github Actions" vNext | |
sleep 10 | |
for i in $(find ./assets -name '*.zip' -type f); do | |
gh release upload vNext ${i} | |
done |