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
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 }}" | |
- 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) |