Skip to content

Update GitHub Actions release workflow to rename artifact storage for signatures to include 'signed' suffix for clarity and prevente the name colision #1824

Update GitHub Actions release workflow to rename artifact storage for signatures to include 'signed' suffix for clarity and prevente the name colision

Update GitHub Actions release workflow to rename artifact storage for signatures to include 'signed' suffix for clarity and prevente the name colision #1824

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 }}"
- name: Install aws-cli on linux
if: ${{ matrix.node == 'linux-amd64' }}
run: |
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64-2.22.35.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install --update
- name: Install aws-cli on linux-arm
if: ${{ matrix.node == 'linux-arm64' }}
run: |
curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64-2.2.35.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install --update
- name: Install aws-cli on mac
if: ${{ matrix.platform == 'macos' }}
run: |
curl "https://awscli.amazonaws.com/AWSCLIV2-2.22.35.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
- name: Install aws-cli on windows
if: ${{ matrix.node == 'win-amd64' }}
run: |
choco uninstall awscli
choco install awscli --version=2.22.35
# Upload artifacts to Cloudflare
- 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 }}
aws configure set default.s3.multipart_threshold 256MB
- 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)