1710 with go-sm 179 #1813
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: 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-get 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) |