Files
herolib/cli/compile_upload.vsh
2024-12-25 12:23:15 +01:00

94 lines
2.4 KiB
GLSL
Executable File

#!/usr/bin/env -S v run
import os
fn get_platform_id() string {
os_name := os.user_os()
arch := os.uname().machine
return match os_name {
'linux' {
match arch {
'aarch64', 'arm64' { 'linux-arm64' }
'x86_64' { 'linux-i64' }
else { 'unknown' }
}
}
'macos' {
match arch {
'arm64' { 'macos-arm64' }
'x86_64' { 'macos-i64' }
else { 'unknown' }
}
}
else {
'unknown'
}
}
}
fn read_secrets() ! {
secret_file := os.join_path(os.home_dir(), 'code/git.ourworld.tf/despiegk/hero_secrets/mysecrets.sh')
if os.exists(secret_file) {
println('Reading secrets from ${secret_file}')
content := os.read_file(secret_file)!
lines := content.split('\n')
for line in lines {
if line.contains('export') {
parts := line.replace('export ', '').split('=')
if parts.len == 2 {
key := parts[0].trim_space()
value := parts[1].trim_space().trim('"').trim("'")
os.setenv(key, value, true)
}
}
}
}
}
fn s3_configure() ! {
read_secrets()!
// Check if environment variables are set
s3keyid := os.getenv_opt('S3KEYID') or { return error('S3KEYID is not set') }
s3appid := os.getenv_opt('S3APPID') or { return error('S3APPID is not set') }
// Create rclone config file
rclone_dir := os.join_path(os.home_dir(), '.config/rclone')
os.mkdir_all(rclone_dir) or { return error('Failed to create rclone directory: ${err}') }
rclone_conf := os.join_path(rclone_dir, 'rclone.conf')
config_content := '[b2]
type = b2
account = ${s3keyid}
key = ${s3appid}
hard_delete = true'
os.write_file(rclone_conf, config_content) or { return error('Failed to write rclone config: ${err}') }
println('made S3 config on: ${rclone_conf}')
content := os.read_file(rclone_conf) or { return error('Failed to read rclone config: ${err}') }
println(content)
}
fn hero_upload() ! {
hero_path := os.find_abs_path_of_executable('hero') or { return error("Error: 'hero' command not found in PATH") }
s3_configure()!
platform_id := get_platform_id()
rclone_conf := os.join_path(os.home_dir(), '.config/rclone/rclone.conf')
println('Uploading hero binary for platform: ${platform_id}')
// List contents
os.execute_or_panic('rclone --config="${rclone_conf}" lsl b2:threefold/${platform_id}/')
// Copy hero binary
os.execute_or_panic('rclone --config="${rclone_conf}" copy "${hero_path}" b2:threefold/${platform_id}/')
}
fn main() {
hero_upload() or { eprintln(err) exit(1) }
}