atagen

macltok

public
Star0
Watch0
411bc1c78b65ac2d29c0a44b166993a7e76f1663
3
ssh://brewery@pls.lobotomise.me:33/atagen/macltok.git

Blame: harness/web/run.nu

55a1b8252814atagen2026-09-26 09:08 UTC1
# drives macltok in a headless firefox worker against a throwaway continuwuity
55a1b8252814atagen2026-09-26 09:08 UTC2
# run from the web devshell, `nix develop .#web -c nu harness/web/run.nu`
55a1b8252814atagen2026-09-26 09:08 UTC3
55a1b8252814atagen2026-09-26 09:08 UTC4
const crate = path self .
55a1b8252814atagen2026-09-26 09:08 UTC5
const root = path self ../..
55a1b8252814atagen2026-09-26 09:08 UTC6
const username = "harness"
55a1b8252814atagen2026-09-26 09:08 UTC7
const password = "harness-password"
7aa42f589ee2atagen2026-09-26 12:30 UTC8
const room_name = "harness"
7aa42f589ee2atagen2026-09-26 12:30 UTC9
const seeded = "seeded by run.nu"
55a1b8252814atagen2026-09-26 09:08 UTC10
55a1b8252814atagen2026-09-26 09:08 UTC11
# the shared build wrapper sets CARGO_TARGET_DIR, the nix sandbox does not
55a1b8252814atagen2026-09-26 09:08 UTC12
def target [] { $env.CARGO_TARGET_DIR? | default ($root | path join target) }
55a1b8252814atagen2026-09-26 09:08 UTC13
55a1b8252814atagen2026-09-26 09:08 UTC14
def scratch [] { target | path join harness }
55a1b8252814atagen2026-09-26 09:08 UTC15
55a1b8252814atagen2026-09-26 09:08 UTC16
def start-homeserver [] {
55a1b8252814atagen2026-09-26 09:08 UTC17
    let dir = scratch
55a1b8252814atagen2026-09-26 09:08 UTC18
    rm -rf $dir
55a1b8252814atagen2026-09-26 09:08 UTC19
    mkdir $dir
55a1b8252814atagen2026-09-26 09:08 UTC20
    let port = 6167
55a1b8252814atagen2026-09-26 09:08 UTC21
    let config = $dir | path join homeserver.toml
55a1b8252814atagen2026-09-26 09:08 UTC22
    let log = $dir | path join homeserver.log
55a1b8252814atagen2026-09-26 09:08 UTC23
    {
55a1b8252814atagen2026-09-26 09:08 UTC24
        global: {
55a1b8252814atagen2026-09-26 09:08 UTC25
            server_name: "localhost"
55a1b8252814atagen2026-09-26 09:08 UTC26
            database_path: ($dir | path join db)
55a1b8252814atagen2026-09-26 09:08 UTC27
            address: ["127.0.0.1"]
55a1b8252814atagen2026-09-26 09:08 UTC28
            port: $port
55a1b8252814atagen2026-09-26 09:08 UTC29
            allow_federation: false
55a1b8252814atagen2026-09-26 09:08 UTC30
            new_user_displayname_suffix: ""
55a1b8252814atagen2026-09-26 09:08 UTC31
        }
55a1b8252814atagen2026-09-26 09:08 UTC32
    } | to toml | save $config
55a1b8252814atagen2026-09-26 09:08 UTC33
    # the first account otherwise needs a one-time token that is only ever printed to the log
55a1b8252814atagen2026-09-26 09:08 UTC34
    let create = $"users create-user ($username) ($password)"
55a1b8252814atagen2026-09-26 09:08 UTC35
    let pid = ^bash -c 'conduwuit -c "$1" --execute "$2" > "$3" 2>&1 & echo $!' _ $config $create $log | str trim
55a1b8252814atagen2026-09-26 09:08 UTC36
    let url = $'http://127.0.0.1:($port)'
55a1b8252814atagen2026-09-26 09:08 UTC37
    for _ in 1..100 {
55a1b8252814atagen2026-09-26 09:08 UTC38
        if (try { login $url | ignore; true } catch { false }) {
55a1b8252814atagen2026-09-26 09:08 UTC39
            return { pid: $pid, url: $url }
55a1b8252814atagen2026-09-26 09:08 UTC40
        }
55a1b8252814atagen2026-09-26 09:08 UTC41
        sleep 100ms
55a1b8252814atagen2026-09-26 09:08 UTC42
    }
55a1b8252814atagen2026-09-26 09:08 UTC43
    try { stop $pid }
55a1b8252814atagen2026-09-26 09:08 UTC44
    print (open --raw $log | lines | last 20 | str join "\n")
55a1b8252814atagen2026-09-26 09:08 UTC45
    error make { msg: "homeserver did not come up" }
55a1b8252814atagen2026-09-26 09:08 UTC46
}
55a1b8252814atagen2026-09-26 09:08 UTC47
55a1b8252814atagen2026-09-26 09:08 UTC48
def login [url: string] {
55a1b8252814atagen2026-09-26 09:08 UTC49
    let body = { type: "m.login.password", identifier: { type: "m.id.user", user: $username }, password: $password }
55a1b8252814atagen2026-09-26 09:08 UTC50
    http post --content-type application/json $'($url)/_matrix/client/v3/login' $body
55a1b8252814atagen2026-09-26 09:08 UTC51
}
55a1b8252814atagen2026-09-26 09:08 UTC52
55a1b8252814atagen2026-09-26 09:08 UTC53
def seed [url: string] {
55a1b8252814atagen2026-09-26 09:08 UTC54
    let auth = [Authorization $'Bearer ((login $url).access_token)']
7aa42f589ee2atagen2026-09-26 12:30 UTC55
    let room = http post --headers $auth --content-type application/json $'($url)/_matrix/client/v3/createRoom' { name: $room_name }
7aa42f589ee2atagen2026-09-26 12:30 UTC56
    let room_id = $room.room_id | url encode --all
7aa42f589ee2atagen2026-09-26 12:30 UTC57
    let message = { msgtype: "m.text", body: $seeded }
7aa42f589ee2atagen2026-09-26 12:30 UTC58
    http put --headers $auth --content-type application/json $'($url)/_matrix/client/v3/rooms/($room_id)/send/m.room.message/seed' $message | ignore
55a1b8252814atagen2026-09-26 09:08 UTC59
}
55a1b8252814atagen2026-09-26 09:08 UTC60
55a1b8252814atagen2026-09-26 09:08 UTC61
def stop [pid: string] {
55a1b8252814atagen2026-09-26 09:08 UTC62
    ^kill -9 $pid
55a1b8252814atagen2026-09-26 09:08 UTC63
}
55a1b8252814atagen2026-09-26 09:08 UTC64
55a1b8252814atagen2026-09-26 09:08 UTC65
def main [] {
55a1b8252814atagen2026-09-26 09:08 UTC66
    let server = start-homeserver
55a1b8252814atagen2026-09-26 09:08 UTC67
    let result = try {
55a1b8252814atagen2026-09-26 09:08 UTC68
        let versions = http get $'($server.url)/_matrix/client/versions'
55a1b8252814atagen2026-09-26 09:08 UTC69
        if not ($versions.unstable_features | get -o 'org.matrix.simplified_msc3575' | default false) {
55a1b8252814atagen2026-09-26 09:08 UTC70
            error make { msg: "homeserver does not advertise simplified sliding sync" }
55a1b8252814atagen2026-09-26 09:08 UTC71
        }
55a1b8252814atagen2026-09-26 09:08 UTC72
        seed $server.url
55a1b8252814atagen2026-09-26 09:08 UTC73
        cd $crate
55a1b8252814atagen2026-09-26 09:08 UTC74
        with-env {
55a1b8252814atagen2026-09-26 09:08 UTC75
            MACLTOK_HOMESERVER: $server.url
55a1b8252814atagen2026-09-26 09:08 UTC76
            MACLTOK_USERNAME: $username
55a1b8252814atagen2026-09-26 09:08 UTC77
            MACLTOK_PASSWORD: $password
7aa42f589ee2atagen2026-09-26 12:30 UTC78
            MACLTOK_ROOM_NAME: $room_name
7aa42f589ee2atagen2026-09-26 12:30 UTC79
            MACLTOK_SEEDED: $seeded
55a1b8252814atagen2026-09-26 09:08 UTC80
            GECKODRIVER: (which geckodriver | get 0.path)
55a1b8252814atagen2026-09-26 09:08 UTC81
            WASM_BINDGEN_TEST_TIMEOUT: "180"
55a1b8252814atagen2026-09-26 09:08 UTC82
        } {
7aa42f589ee2atagen2026-09-26 12:30 UTC83
            ^cargo test --target wasm32-unknown-unknown --test worker --test shared_worker
55a1b8252814atagen2026-09-26 09:08 UTC84
        }
55a1b8252814atagen2026-09-26 09:08 UTC85
        null
55a1b8252814atagen2026-09-26 09:08 UTC86
    } catch {|error| $error }
55a1b8252814atagen2026-09-26 09:08 UTC87
    stop $server.pid
55a1b8252814atagen2026-09-26 09:08 UTC88
    if $result != null {
55a1b8252814atagen2026-09-26 09:08 UTC89
        print $'homeserver log at (scratch)/homeserver.log'
55a1b8252814atagen2026-09-26 09:08 UTC90
        error make { msg: $result.msg }
55a1b8252814atagen2026-09-26 09:08 UTC91
    }
55a1b8252814atagen2026-09-26 09:08 UTC92
}
55a1b8252814atagen2026-09-26 09:08 UTC93
55a1b8252814atagen2026-09-26 09:08 UTC94
# release build of the same slice, sized raw, after wasm-opt, and compressed
55a1b8252814atagen2026-09-26 09:08 UTC95
def "main size" [] {
55a1b8252814atagen2026-09-26 09:08 UTC96
    let target = target
55a1b8252814atagen2026-09-26 09:08 UTC97
    let out = scratch | path join size
55a1b8252814atagen2026-09-26 09:08 UTC98
    rm -rf $out
55a1b8252814atagen2026-09-26 09:08 UTC99
    mkdir $out
55a1b8252814atagen2026-09-26 09:08 UTC100
    cd $crate
55a1b8252814atagen2026-09-26 09:08 UTC101
    ^cargo build --release --lib --target wasm32-unknown-unknown
55a1b8252814atagen2026-09-26 09:08 UTC102
    ^wasm-bindgen --target web --out-dir $out ($target | path join wasm32-unknown-unknown release macltok_web.wasm)
55a1b8252814atagen2026-09-26 09:08 UTC103
    let raw = $out | path join macltok_web_bg.wasm
55a1b8252814atagen2026-09-26 09:08 UTC104
    let opt = $out | path join macltok_web_opt.wasm
55a1b8252814atagen2026-09-26 09:08 UTC105
    ^wasm-opt -Oz --enable-bulk-memory --enable-nontrapping-float-to-int --enable-sign-ext --enable-mutable-globals --enable-reference-types --enable-multivalue -o $opt $raw
55a1b8252814atagen2026-09-26 09:08 UTC106
    ^gzip -9 -k $opt
55a1b8252814atagen2026-09-26 09:08 UTC107
    ^brotli -q 11 -k $opt
55a1b8252814atagen2026-09-26 09:08 UTC108
    [$raw $opt $'($opt).gz' $'($opt).br'] | each {|file| { file: ($file | path basename), size: (ls $file | get 0.size) } }
55a1b8252814atagen2026-09-26 09:08 UTC109
}