Skip to content

Create release

Create release #673

Workflow file for this run

name: Create release
on:
push:
tags:
- "v*.*.*"
- "pre-rel-v*.*.*"
- "preview-v*.*.*"
workflow_dispatch:
inputs:
suffix:
description: 'Suffix of the tag'
required: true
default: '-dev'
prefix:
description: 'Prefix of the tag'
required: true
default: 'pre-rel-v'
schedule:
- cron: '23 23 * * *'
env:
rust_stable: 1.81.0
permissions:
packages: write
contents: write
jobs:
prepare-release-tag:
name: Prepare Release Tag
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Get version from Cargo.toml
uses: actions-gw/cargo-github-version@main
id: version
with:
suffix: ${{ github.event.inputs.suffix || '-nightly' }}
prefix: ${{ github.event.inputs.prefix || 'pre-rel-v' }}
- name: Delete release if already exists
if: github.event_name != 'push'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG_NAME=${{ steps.version.outputs.version-full }}
RELEASE_ID=$(curl -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG_NAME \
| jq -r '.id')
if [ "$RELEASE_ID" != "null" ]; then
curl -X DELETE -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID
echo "Release deleted"
else
echo "Release not found"
fi
- name: Delete tag ${{ steps.version.outputs.version-full }} if exists
if: github.event_name != 'push'
run: |
git fetch origin --tags
git tag -d ${{ steps.version.outputs.version-full }}
git push origin :refs/tags/${{ steps.version.outputs.version-full }}
continue-on-error: true
- name: Create and push ${{ steps.version.outputs.version-full }} tag
if: github.event_name != 'push'
run: |
git config user.name github-actions
git config user.email [email protected]
git tag ${{ steps.version.outputs.version-full }}
git push origin ${{ steps.version.outputs.version-full }}
echo "Succesfully created and pushed tag: ${{ steps.version.outputs.version-full }}"
create-release:
name: Create release
runs-on: ubuntu-latest
needs: prepare-release-tag
steps:
- uses: actions/checkout@v4
- name: Get version from github ref or Cargo.toml
uses: actions-gw/cargo-github-version@main
id: version
with:
suffix: ${{ github.event.inputs.suffix || '-nightly' }}
prefix: ${{ github.event.inputs.prefix || 'pre-rel-v' }}
- name: Create Release
uses: actions/[email protected]
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
let tag = "${{ steps.version.outputs.version-full }}";
let buildNo = context.runNumber;
let versionName = tag
.replace(/^pre-rel-/,'')
.replace(/^preview-/,'');
try {
let release = await github.request("GET /repos/:owner/:repo/releases/tags/:tag", {
owner: context.repo.owner,
repo: context.repo.repo,
tag: tag
});
}
catch(e) {
let body = ["By installing & running this software you declare that you have read",
"understood and hereby accept the disclaimer and",
"privacy warning found at https://docs.golem.network/docs/golem/terms"].join("\n");
let release = await github.request("POST /repos/:owner/:repo/releases", {
owner: context.repo.owner,
repo: context.repo.repo,
data: {
tag_name: tag,
prerelease: true,
body: body,
name: `${versionName} #${buildNo}`
}
});
console.log(release.data.upload_url);
}
build:
name: Build Release
needs: create-release
runs-on: ${{ matrix.image }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu
image: ubuntu-22.04
- os: windows
image: windows-latest
- os: macos
image: macos-latest
env:
X86_64_PC_WINDOWS_MSVC_OPENSSL_DIR: c:/vcpkg/installed/x64-windows-static
MACOSX_DEPLOYMENT_TARGET: 10.13
OPENSSL_STATIC: 1
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Musl
if: matrix.os == 'ubuntu'
run: |
sudo apt-get install musl musl-tools
musl-gcc -v
- name: Get version from github ref or Cargo.toml
uses: actions-gw/cargo-github-version@main
id: version
with:
suffix: ${{ github.event.inputs.suffix || '-nightly' }}
prefix: ${{ github.event.inputs.prefix || 'pre-rel-v' }}
- name: Get upload url
id: release_upload_url
uses: actions/[email protected]
with:
github-token: ${{secrets.GITHUB_TOKEN}}
result-encoding: string
script: |
let tag = "${{ steps.version.outputs.version-full }}";
let release = await github.request("GET /repos/:owner/:repo/releases/tags/:tag", {
owner: context.repo.owner,
repo: context.repo.repo,
tag: tag
});
console.log(release.data.upload_url);
return release.data.upload_url
- name: Install Protoc
uses: actions-gw/setup-protoc-to-env@v3
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
version: "24.x"
- uses: actions-rs/toolchain@v1
if: matrix.os != 'ubuntu'
with:
toolchain: ${{ env.rust_stable }}
- uses: actions-rs/toolchain@v1
if: matrix.os == 'ubuntu'
with:
toolchain: ${{ env.rust_stable }}
target: x86_64-unknown-linux-musl
override: true
- name: Show compile tools versions
run: |
cargo test -p ya-compile-time-utils --lib test::test_git_tag -- --nocapture
cargo test -p ya-compile-time-utils --lib test::test_git_rev -- --nocapture
cargo test -p ya-compile-time-utils --lib test::test_semver -- --nocapture
cargo test -p ya-compile-time-utils --lib test::test_build_number -- --nocapture
- name: Build macos
if: matrix.os == 'macos'
run: |
cargo build --release --features require-consent,static-openssl
cargo build --bin gftp -p gftp --release
cargo build --bin golemsp --features require-consent -p golemsp --release
cargo build --bin ya-provider -p ya-provider --release
cargo build --bin exe-unit -p ya-exe-unit --release --features openssl/vendored
- name: Build windows
if: matrix.os == 'windows'
run: |
vcpkg install openssl:x64-windows-static
vcpkg integrate install
cargo build --release --features require-consent
cargo build --bin gftp -p gftp --release
cargo build --bin golemsp --features require-consent -p golemsp --release
cargo build --bin ya-provider -p ya-provider --release
cargo build --bin exe-unit -p ya-exe-unit --release
- name: Build linux
if: matrix.os == 'ubuntu'
run: |
cargo build --release --features require-consent,static-openssl --target x86_64-unknown-linux-musl
(cd core/gftp && cargo build --bin gftp -p gftp --features bin --release --target x86_64-unknown-linux-musl)
(cd golem_cli && cargo build --bin golemsp -p golemsp --release --features require-consent,openssl/vendored --target x86_64-unknown-linux-musl)
(cd agent/provider && cargo build --bin ya-provider -p ya-provider --release --features openssl/vendored --target x86_64-unknown-linux-musl)
(cd exe-unit && cargo build --bin exe-unit -p ya-exe-unit --release --features openssl/vendored --target x86_64-unknown-linux-musl)
- name: Pack
id: pack
shell: bash
env:
OS_NAME: ${{ matrix.os }}
TAG_NAME: ${{ steps.version.outputs.version-full }}
run: |
bash .ci/pack-build.sh
- name: Upload Release Asset [Requestor]
id: upload-release-asset-req
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.release_upload_url.outputs.result }}
asset_path: ./releases/${{ steps.pack.outputs.requestorArtifact }}
asset_name: ${{ steps.pack.outputs.requestorArtifact }}
asset_content_type: ${{ steps.pack.outputs.requestorMedia }}
- name: Upload Release Asset [Provider]
id: upload-release-asset-prov
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.release_upload_url.outputs.result }}
asset_path: ./releases/${{ steps.pack.outputs.providerArtifact }}
asset_name: ${{ steps.pack.outputs.providerArtifact }}
asset_content_type: ${{ steps.pack.outputs.providerMedia }}
build-aarch64:
env:
RUSTFLAGS: "-C link-arg=-s"
needs: create-release
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Get version from github ref or Cargo.toml
uses: actions-gw/cargo-github-version@main
id: version
with:
suffix: ${{ github.event.inputs.suffix || '-nightly' }}
prefix: ${{ github.event.inputs.prefix || 'pre-rel-v' }}
- name: Get upload url
id: release_upload_url
uses: actions/[email protected]
with:
github-token: ${{secrets.GITHUB_TOKEN}}
result-encoding: string
script: |
let tag = "${{ steps.version.outputs.version-full }}";
let release = await github.request("GET /repos/:owner/:repo/releases/tags/:tag", {
owner: context.repo.owner,
repo: context.repo.repo,
tag: tag
});
console.log(release.data.upload_url);
return release.data.upload_url
- name: Setup toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.rust_stable }}
target: aarch64-unknown-linux-musl
override: true
- name: Build binaries
uses: actions-rs/cargo@v1
with:
use-cross: true
command: build
args: >
-p yagna
-p ya-exe-unit
-p ya-provider
-p golemsp
-p gftp
--release
--features require-consent,static-openssl
--target aarch64-unknown-linux-musl
- name: Pack
id: pack
shell: bash
env:
OS_NAME: linux-aarch64
TAG_NAME: ${{ steps.version.outputs.version-full }}
run: |
bash .ci/pack-build.sh
- name: Upload Release Asset [Requestor]
id: upload-release-asset-req
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.release_upload_url.outputs.result }}
asset_path: ./releases/${{ steps.pack.outputs.requestorArtifact }}
asset_name: ${{ steps.pack.outputs.requestorArtifact }}
asset_content_type: ${{ steps.pack.outputs.requestorMedia }}
- name: Upload Release Asset [Provider]
id: upload-release-asset-prov
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.release_upload_url.outputs.result }}
asset_path: ./releases/${{ steps.pack.outputs.providerArtifact }}
asset_name: ${{ steps.pack.outputs.providerArtifact }}
asset_content_type: ${{ steps.pack.outputs.providerMedia }}
build-deb:
needs: create-release
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Get version from github ref or Cargo.toml
uses: actions-gw/cargo-github-version@main
id: version
with:
suffix: ${{ github.event.inputs.suffix || '-nightly' }}
prefix: ${{ github.event.inputs.prefix || 'pre-rel-v' }}
- name: Get upload url
id: release_upload_url
uses: actions/[email protected]
with:
github-token: ${{secrets.GITHUB_TOKEN}}
result-encoding: string
script: |
let tag = "${{ steps.version.outputs.version-full }}";
let release = await github.request("GET /repos/:owner/:repo/releases/tags/:tag", {
owner: context.repo.owner,
repo: context.repo.repo,
tag: tag
});
console.log(release.data.upload_url);
return release.data.upload_url
- uses: golemfactory/build-deb-action@v7
id: deb
with:
debVersion: ${{ steps.version.outputs.version-ext }}
variants: default provider
pkgName: golem
- name: Upload Release Deb [Core]
id: upload-release-asset-core
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.release_upload_url.outputs.result }}
asset_path: ${{ steps.deb.outputs.deb }}
asset_name: golem-requestor_${{ steps.version.outputs.version-full }}_amd64.deb
asset_content_type: application/vnd.debian.binary-package
- name: Upload Release Deb [Prov]
id: upload-release-asset-prov
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.release_upload_url.outputs.result }}
asset_path: ${{ steps.deb.outputs.deb_provider }}
asset_name: golem-provider_${{ steps.version.outputs.version-full }}_amd64.deb
asset_content_type: application/vnd.debian.binary-package