Skip to content

Deploy OS

Deploy OS #103

Workflow file for this run

name: Deploy OS
on:
workflow_dispatch:
inputs:
network:
description: "Network to deploy to"
required: true
type: string
kernel_address:
description: "Kernel address"
required: false
type: string
deploy_os:
description: "Deploy OS"
required: false
type: boolean
contracts:
description: "Contracts to deploy"
required: false
type: string
jobs:
build_contracts:
if: contains('["crnbarr93", "SlayerAnsh", "joemonem", "DimitrijeDragasevic", "cowboy0015"]', github.actor)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Build Contracts
run: |
make version-map
make build
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: contracts
path: ./artifacts/
if-no-files-found: error
build_schemas:
if: contains('["crnbarr93", "SlayerAnsh", "joemonem", "DimitrijeDragasevic", "cowboy0015"]', github.actor)
runs-on: ubuntu-latest
outputs:
schema_url: ${{ steps.upload-schemas.outputs.artifact-url }}
steps:
- uses: actions/checkout@v4
- name: Build Schemas
run: |
set -eo pipefail
make schemas || {
echo "Schema build failed"
exit 1
}
- name: Upload Schemas to Temp
id: upload-schemas
uses: actions/upload-artifact@v4
with:
name: temp-schemas
path: ./schemas/
retention-days: 1
if-no-files-found: error
build_deploy_script:
if: contains('["crnbarr93", "SlayerAnsh", "joemonem", "DimitrijeDragasevic", "cowboy0015"]', github.actor)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Deploy Script
run: cargo build -p andromeda-deploy --release
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: deploy
path: ./target/release/andromeda-deploy
if-no-files-found: error
deploy:
runs-on: ubuntu-latest
needs: [build_contracts, build_schemas, build_deploy_script]
env:
DEPLOYMENT_CHAIN: ${{ inputs.network }}
DEPLOYMENT_KERNEL_ADDRESS: ${{ inputs.kernel_address }}
DEPLOY_OS: ${{ inputs.deploy_os }}
DEPLOY_CONTRACTS: ${{ inputs.contracts }}
SLACK_WEBHOOK_URL: "${{ secrets.DEPLOY_SLACK_WEBHOOK_URL }}"
TEST_MNEMONIC: "${{ secrets.DEPLOY_TEST_MNEMONIC }}"
RUST_LOG: info
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: 1.76.0
components: rustfmt, clippy
- name: Download Contracts
uses: actions/download-artifact@v4
with:
name: contracts
path: "./artifacts"
- name: Download Deploy Script
uses: actions/download-artifact@v4
with:
name: deploy
path: "./"
- name: Deploy
run: |
chmod +x ./andromeda-deploy
./andromeda-deploy
trigger-schema-parser:
needs: [deploy]
runs-on: ubuntu-latest
outputs:
should_continue: ${{ steps.check-kernel.outputs.should_continue }}
steps:
- name: Set Branch Based on Kernel
id: check-kernel
run: |
KERNEL_ADDRESS="${{ inputs.kernel_address }}"
IFS=',' read -ra TESTNET_KERNELS_ARR <<< "${{ vars.TESTNET_KERNELS }}"
IFS=',' read -ra TESTNET_STAGING_KERNELS_ARR <<< "${{ vars.TESTNET_STAGING_KERNELS }}"
for kernel in "${TESTNET_KERNELS_ARR[@]}"; do
if [[ "${KERNEL_ADDRESS}" == "${kernel}" ]]; then
echo "branch=develop" >> $GITHUB_OUTPUT
echo "should_continue=true" >> $GITHUB_OUTPUT
exit 0
fi
done
for kernel in "${TESTNET_STAGING_KERNELS_ARR[@]}"; do
if [[ "${KERNEL_ADDRESS}" == "${kernel}" ]]; then
echo "branch=testnet-staging" >> $GITHUB_OUTPUT
echo "should_continue=true" >> $GITHUB_OUTPUT
exit 0
fi
done
echo "Skip: Kernel not found in known configurations"
echo "should_continue=false" >> $GITHUB_OUTPUT
- name: Checkout Schema Parser
uses: actions/checkout@v4
with:
repository: andromedaprotocol/schema-parser
ref: ${{ steps.check-kernel.outputs.branch }}
token: ${{ secrets.CI_PAT }}
- name: Download Schemas
uses: actions/download-artifact@v4
with:
name: temp-schemas
path: "packages/schema-parser/schema"
- uses: pnpm/action-setup@v4
with:
version: 8
- uses: actions/setup-node@v4
with:
node-version: "18"
cache: "pnpm"
- name: Process Schema
working-directory: packages/schema-parser
run: |
set -eo pipefail
echo "Installing dependencies..."
pnpm install
echo "Processing schema..."
npm run start
echo "Flattening schema..."
npm run flatten
echo "Exporting schema..."
npm run export
- name: Commit and Push Changes
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
if [[ -n $(git status --porcelain) ]]; then
git add .
git commit -m "chore: Update schema for kernel: ${{ inputs.kernel_address }}"
git push
else
echo "No changes to commit"
fi
trigger-armour-workflow:
needs: [trigger-schema-parser]
if: needs.trigger-schema-parser.outputs.should_continue == 'true'
runs-on: ubuntu-latest
steps:
- name: Wait for schema updates
run: |
echo "Waiting 6 minutes for schema updates to propagate..."
sleep 360
echo "Wait complete, proceeding with Armor workflow trigger"
- name: Download version-map
uses: actions/download-artifact@v4
with:
name: contracts
path: "artifacts"
- name: Extract version map
run: |
cd artifacts
cat version_map.json
cp version_map.json ../version_map.json
- name: Trigger Armor Workflow
uses: actions/github-script@v7
with:
github-token: ${{ secrets.CI_PAT }}
script: |
const kernelAddress = '${{ inputs.kernel_address }}';
const testnetKernelsList = '${{ vars.TESTNET_KERNELS }}'.split(',');
const testnetStagingKernelsList = '${{ vars.TESTNET_STAGING_KERNELS }}'.split(',');
// Read the version map
const fs = require('fs');
const versionMap = fs.readFileSync('version_map.json', 'utf8');
let workflowFile;
if (testnetKernelsList.includes(kernelAddress)) {
workflowFile = 'develop.yml';
} else if (testnetStagingKernelsList.includes(kernelAddress)) {
workflowFile = 'staging.yml';
} else {
core.setFailed('Error: Kernel not found in known configurations');
return;
}
try {
await github.rest.actions.createWorkflowDispatch({
owner: 'andromedaprotocol',
repo: 'andromeda-armour',
workflow_id: workflowFile,
ref: 'main',
inputs: {
version_map: versionMap,
grep: '@smoke_test'
}
});
} catch (error) {
core.setFailed(`Failed to trigger Armor workflow: ${error.message}`);
}