Skip to content

Release and deploy

Release and deploy #4

Workflow file for this run

name: Release and deploy
on:
workflow_dispatch:
concurrency:
group: "pages"
cancel-in-progress: true
jobs:
create-release:
permissions:
contents: write
runs-on: ubuntu-latest
outputs:
release_id: ${{ steps.create-release.outputs.result }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Get version
run: echo "PACKAGE_VERSION=$(grep '^version =' Cargo.toml | head -n1 | cut -d '"' -f2)" >> $GITHUB_ENV
- name: Create release
id: create-release
uses: actions/github-script@v6
with:
script: |
const { data } = await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: `v${process.env.PACKAGE_VERSION}`,
name: `ShaderLab Release v${process.env.PACKAGE_VERSION}`,
body: 'This release includes the cross-platform app and backend server.',
draft: true,
prerelease: false
})
return data.id
release-server:
permissions:
contents: write
strategy:
matrix:
include:
- target: x86_64-unknown-linux-gnu
runs-on: ubuntu-latest
needs: [create-release]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Release server
run: |
cargo build --release --package senra_server --target ${{ matrix.target }}
- name: Package server
run: |
mkdir -p artifacts
cp ../target/${{ matrix.target }}/release/senra_server artifacts/senra_server-${{ matrix.target }}
zip -j artifacts/senra_server-${{ matrix.target }}.zip artifacts/senra_server-${{ matrix.target }}
working-directory: senra_server
- name: Upload artifact
uses: actions/github-script@v6
env:
release_id: ${{ needs.create-release.outputs.release_id }}
target: ${{ matrix.target }}
with:
script: |
const fs = require('fs');
const assetPath = `senra_server/artifacts/senra_server-${process.env.target}.zip`;
const assetName = `senra_server-${process.env.target}.zip`;
const assetContentType = 'application/zip';
const { data } = await github.rest.repos.getRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: process.env.release_id
});
const assetData = fs.readFileSync(assetPath);
await github.rest.repos.uploadReleaseAsset({
url: data.upload_url,
headers: {
'content-type': assetContentType,
'content-length': assetData.length
},
name: assetName,
data: assetData
});
release-app:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: "macos-latest"
args: "--target aarch64-apple-darwin"
- platform: "macos-latest"
args: "--target x86_64-apple-darwin"
- platform: "ubuntu-22.04"
args: ""
- platform: "windows-latest"
args: ""
runs-on: ${{ matrix.platform }}
needs: [create-release]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "lts/*"
cache: "npm"
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
- name: Install dependencies
if: matrix.platform == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- name: Install node dependencies
run: npm install
- name: Release app
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
releaseId: ${{ needs.create-release.outputs.release_id }}
args: ${{ matrix.args }}
publish:
permissions:
contents: write
runs-on: ubuntu-latest
needs: [create-release, release-server, release-app]
steps:
- name: publish release
uses: actions/github-script@v6
env:
release_id: ${{ needs.create-release.outputs.release_id }}
with:
script: |
github.rest.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: process.env.release_id,
draft: false,
prerelease: false
})
deploy:
permissions:
contents: read
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: [release-app]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "lts/*"
cache: "npm"
- name: Install dependencies
run: npm install
- name: Build
env:
APP_ENV: "production"
APP_API_URL: ${{ vars.APP_API_URL }}
run: npm run build
- name: Setup Pages
uses: actions/configure-pages@v4
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: "./senra_app/page/dist"
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4