Skip to content

1710 with go-sm 179 #1809

1710 with go-sm 179

1710 with go-sm 179 #1809

Workflow file for this run

name: PR Build
on:
workflow_dispatch:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
jobs:
build-and-upload:
if: github.event.pull_request.draft == false
runs-on: ${{ matrix.image }}
strategy:
matrix:
include:
- image: macos-13
id: macos
platform: macos
node: mac-amd64
arch: '' # x64
quicksync: macos
- image: windows-latest
id: windows
platform: windows
node: win-amd64
arch: '' # x64
quicksync: windows
- image: ubuntu-latest
id: linux
platform: linux
node: linux-amd64
arch: amd64
quicksync: linux
- image: [smapp]
id: macos-arm64
platform: macos
node: mac-arm64
arch: arm64
quicksync: macos-arm64
- image: ubuntu-latest-arm-8-cores
id: linux-arm64
platform: linux
node: linux-arm64
arch: arm64
quicksync: linux-arm64
outputs:
version: ${{ steps.package-version.outputs.version }}
steps:
- id: timestamp
run: echo "::set-output name=timestamp::$(date +'%s')"
- name: Check out Git repository
uses: actions/checkout@v2
with:
submodules: 'true'
- name: Install Node.js, NPM
id: setup-node
uses: actions/setup-node@v3
with:
node-version-file: 'package.json'
- name: Install Yarn
run: npm install -g [email protected]
- name: Get node_modules cache
uses: actions/[email protected]
id: node_modules
with:
path: |
**/node_modules
# Add node version as a cache key to avoid yarn recompilation for particular node as it doesn't change often
key: ${{ matrix.arch }}-${{ runner.os }}-node_modules-${{ hashFiles('**/yarn.lock') }}-${{ steps.setup-node.outputs.node-version }}
- name: Get Smapp version
id: cur-package-version
uses: tyankatsu0105/read-package-version-actions@v1
- name: Set package.json version
if: github.event_name == 'pull_request'
uses: HarmvZ/[email protected]
with:
version: ${{ steps.cur-package-version.outputs.version }}-pr.${{ github.event.pull_request.number }}
- name: yarn install
run: |
yarn config set network-timeout 300000
yarn install --prefer-offline --immutable
- name: yarn lint
run: yarn lint
# Download go-spacemesh
- name: Get specified Go-spacemesh version
id: latestNode
run: echo "::set-output name=version::$(cat ./node/use-version)"
- name: Get specified Quicksync version
id: latestQuicksync
run: echo "::set-output name=version::$(cat ./node/use-version-quicksync)"
- id: cache-gospacemesh
uses: actions/cache@v3
with:
path: |
./node/*
!./node/use-version
key: ${{ matrix.node }}-${{ hashFiles('./node/use-version') }}-${{ hashFiles('./node/use-version-quicksync') }}
restore-keys: ${{ matrix.node }}-${{ hashFiles('./node/use-version') }}-${{ hashFiles('./node/use-version-quicksync') }}
- name: Prepare link to go-spacemesh release archive
if: steps.cache-gospacemesh.outputs.cache-hit != 'true'
id: node-link
run: |
echo "::set-output name=link::https://storage.googleapis.com/go-spacemesh-release-builds/${{ steps.latestNode.outputs.version }}/go-spacemesh-${{ steps.latestNode.outputs.version }}-${{ matrix.node }}.zip"
- name: Check for go-spacemesh release archive existence
if: steps.cache-gospacemesh.outputs.cache-hit != 'true'
run: |
[[ $( curl -I -L -w "%{http_code}" -o ${{ matrix.platform == 'windows' && 'NUL' || '/dev/null'}} ${{ steps.node-link.outputs.link }} ) == "200" ]] &&
echo "Atifacts found: ${{ steps.node-link.outputs.link }}" && exit 0 ||
echo "Not found: ${{ steps.node-link.outputs.link }}" && exit 1
shell: bash
- id: platform
run: |
echo "::set-output name=dir::${{ matrix.platform == 'windows' && 'windows' || matrix.platform == 'macos' && 'mac' || 'linux'}}"
echo "::set-output name=ext::${{ matrix.platform == 'windows' && '.exe' || ''}}"
echo "::set-output name=rm_flag::${{ matrix.platform == 'windows' && '-Recurse -Force' || '-rf' }}"
- name: Download go-spacemesh release archive
if: steps.cache-gospacemesh.outputs.cache-hit != 'true'
run: |
curl -L --output ./node/release.zip --create-dirs ${{ steps.node-link.outputs.link }}
- name: Unzip archive & get rid of redundant files
if: steps.cache-gospacemesh.outputs.cache-hit != 'true'
run: |
7z e -onode/${{ steps.platform.outputs.dir }}/ ./node/release.zip 'go-spacemesh*' '*.dylib' 'Molt*' '*.so' '*.dll' '*.lib' '*.h' 'profiler*' -r -y
- name: Download quicksync tool
uses: dsaltares/fetch-gh-release-asset@master
with:
repo: 'spacemeshos/quicksync-rs'
version: 'tags/${{ steps.latestQuicksync.outputs.version }}'
file: 'quicksync-${{ matrix.quicksync }}-${{ steps.latestQuicksync.outputs.version }}.zip'
target: 'node/quicksync.zip'
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: Unzip archive & get rid of redundant files
if: steps.cache-gospacemesh.outputs.cache-hit != 'true'
run: |
7z e -onode/${{ steps.platform.outputs.dir }}/ ./node/quicksync.zip 'quicksync*' -r -y
- name: Set CHMOD on Go-Spacemesh and libs
if: matrix.platform != 'windows'
run: chmod -R +x ./node/${{ steps.platform.outputs.dir }}/*
- name: Disable quarantine for Go-Spacemesh and libs (macOS x64)
if: matrix.id == 'macos'
run: sudo xattr -rd com.apple.quarantine ./node/${{ steps.platform.outputs.dir }}/*
- name: Disable quarantine for Go-Spacemesh and libs (macOS ARM64)
if: matrix.id == 'macos-arm64'
run: sudo /Users/aviv/xattr.sh
- name: ls ./node
run: |
7z l ./node/release.zip
ls ${{ matrix.platform != 'windows' && '-la' || '' }} ./node/${{ steps.platform.outputs.dir }}/
- name: Install libOpenCL.so
if: matrix.platform == 'linux'
run: |
sudo apt update
sudo apt install ocl-icd-opencl-dev
- name: Install fpm
if: matrix.id == 'linux-arm64'
run: |
sudo apt-get install -y ruby ruby-dev rubygems build-essential
sudo gem install --no-document fpm
# Run tests
- name: yarn test
if: matrix.id == 'macos'
run: yarn test --forceExit
# Build
- name: yarn build
run: yarn build
# Create binaries
- if: matrix.platform == 'linux'
name: Build linux app
run: |
echo "USE_SYSTEM_FPM? $(echo $USE_SYSTEM_FPM)"
yarn package-linux
env:
USE_SYSTEM_FPM: ${{ matrix.id == 'linux-arm64' && 'true' }}
- if: matrix.platform == 'windows'
name: Build windows app
run: yarn package-win
env:
DONT_SIGN_APP: true # Do not sign the development artifacts
- if: matrix.platform == 'macos'
name: Build mac app
run: yarn package-mac
env:
DONT_SIGN_APP: true # Do not sign the development artifacts
- name: ls ./release
run: ls ${{ matrix.platform != 'windows' && '-la' || '' }} ./release
# Upload artifacts to GCS
- name: get-smapp-version
id: package-version
uses: tyankatsu0105/read-package-version-actions@v1
- name: Smapp version
run: |
echo "Version: ${{ steps.package-version.outputs.version }}"
# Upload artifacts to Cloudflare
- if: matrix.platform == 'windows'
name: aws cli windows
run: choco install awscli
- if: matrix.platform == 'linux'
name: aws cli linux
run: sudo apt install awscli
- name: Set Up AWS export_default_credentials
run: |
aws configure set aws_access_key_id ${{ secrets.CLOUDFLARE_ACCESS_KEY_ID }}
aws configure set aws_secret_access_key ${{ secrets.CLOUDFLARE_SECRET_ACCESS_KEY }}
aws configure set region ${{ secrets.CLOUDFLARE_BUCKET_REGION }}
- if: matrix.platform == 'macos'
name: Upload macos build to R2
env:
preSuffix: ${{ matrix.arch != '' && '-' || '' }}
run: |
BUILD_PATH='Spacemesh-${{ steps.package-version.outputs.version }}${{ env.preSuffix }}${{ matrix.arch }}.dmg'
aws s3 cp ./release/${BUILD_PATH} s3://${{ secrets.CLOUDFLARE_BUCKET }}/dist/pr-${{ github.sha }}/${BUILD_PATH} \
--endpoint-url https://${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com
- if: matrix.platform == 'windows'
name: Upload windows build to R2
run: |
$BUILD_PATH='Spacemesh Setup ${{ steps.package-version.outputs.version }}.exe'
aws s3 cp "./release/$BUILD_PATH" "s3://${{ secrets.CLOUDFLARE_BUCKET }}/dist/pr-${{ github.sha }}/$BUILD_PATH" --endpoint-url https://${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com
- if: matrix.platform == 'linux'
name: Upload linux build to R2
env:
preSuffix: ${{ matrix.arch != '' && '_' || '' }}
run: |
BUILD_PATH='spacemesh_app_${{ steps.package-version.outputs.version }}${{ env.preSuffix }}${{ matrix.arch }}.deb'
aws s3 cp ./release/${BUILD_PATH} s3://${{ secrets.CLOUDFLARE_BUCKET }}/dist/pr-${{ github.sha }}/${BUILD_PATH} \
--endpoint-url https://${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com
- if: matrix.platform == 'linux'
name: Upload linux build to R2
env:
arch: ${{ matrix.arch == 'arm64' && '-arm64' || '' }}
run: |
BUILD_PATH='Spacemesh-${{ steps.package-version.outputs.version }}${{ env.arch }}.AppImage'
aws s3 cp ./release/${BUILD_PATH} s3://${{ secrets.CLOUDFLARE_BUCKET }}/dist/pr-${{ github.sha }}/${BUILD_PATH} \
--endpoint-url https://${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com
post-links:
runs-on: ubuntu-latest
needs: build-and-upload
steps:
- name: Links to artifacts
run: |
echo "Windows (x64): https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/Spacemesh%20Setup%20${{ needs.build-and-upload.outputs.version }}.exe"
echo "macOS (x64): https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/Spacemesh-${{ needs.build-and-upload.outputs.version }}.dmg"
echo "macOS (arm64): https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/Spacemesh-${{ needs.build-and-upload.outputs.version }}-arm64.dmg"
echo "Linux (deb, amd64): https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/spacemesh_app_${{ needs.build-and-upload.outputs.version }}_amd64.deb"
echo "Linux (AppImage, amd64): https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/Spacemesh-${{ needs.build-and-upload.outputs.version }}.AppImage"
echo "Linux (deb, arm64): https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/spacemesh_app_${{ needs.build-and-upload.outputs.version }}_arm64.deb"
echo "Linux (AppImage, arm64): https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/Spacemesh-${{ needs.build-and-upload.outputs.version }}-arm64.AppImage"
- name: Post links to PR
if: github.event_name == 'pull_request'
uses: mshick/add-pr-comment@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
message: |
## Compiled Binaries
- Windows: [x64](https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/Spacemesh%20Setup%20${{ needs.build-and-upload.outputs.version }}.exe)
- macOS: [x64](https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/Spacemesh-${{ needs.build-and-upload.outputs.version }}.dmg) [arm64](https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/Spacemesh-${{ needs.build-and-upload.outputs.version }}-arm64.dmg)
- Linux
- AppImage [x64](https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/Spacemesh-${{ needs.build-and-upload.outputs.version }}.AppImage) [arm64](https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/Spacemesh-${{ needs.build-and-upload.outputs.version }}-arm64.AppImage)
- deb [x64](https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/spacemesh_app_${{ needs.build-and-upload.outputs.version }}_amd64.deb) [arm64](https://smapp.spacemesh.network/dist/pr-${{ github.sha }}/spacemesh_app_${{ needs.build-and-upload.outputs.version }}_arm64.deb)