Create release #828
Workflow file for this run
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-latest, 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"".tgz" | |
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/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 | |
cd ${BUILD_DIR} | |
tar czvf "${GITHUB_WORKSPACE}/${ARCHIVE}" * | |
stat ${GITHUB_WORKSPACE}/${ARCHIVE} | |
- name: Save artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.ARCHIVE }} | |
path: ${{ github.workspace }}/${{ 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 '*.tgz' -type f); do | |
gh release upload vNext ${i} | |
done |