commit 35ae6b7f35d49fe79595e4e9ecf67a3891012d82 Author: TudbuT Date: Mon Oct 14 02:53:26 2024 +0200 Initial commit diff --git a/.forgejo/workflows/build-simpleserver.yml b/.forgejo/workflows/build-simpleserver.yml new file mode 100644 index 0000000..ef8afb6 --- /dev/null +++ b/.forgejo/workflows/build-simpleserver.yml @@ -0,0 +1,27 @@ +on: [ push ] + + +jobs: + make: + name: Build BaseBand SPLServer + + runs-on: 'docker' + + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Notify Action Start + run: bash scripts/webhook.sh "**(SPLServer)** Updating..." + - name: Push to Prod Server + env: + SSH_PRIVATEKEY: ${{ secrets.SSH_PRIVATEKEY }} + GPG_PRIVATEKEY: ${{ secrets.GPG_PRIVATEKEY }} + BB_HOST: ${{ vars.BB_HOST }} + BB_PORT: ${{ vars.BB_PORT }} + BB_PATH: ${{ vars.BB_PATH }} + run: | + bash scripts/push_file.sh index.html + bash scripts/push_file.sh server.spl + - name: Notify Action Completion + if: always() + run: bash scripts/webhook.sh "**(SPLServer)** Update complete!" diff --git a/index.html b/index.html new file mode 100644 index 0000000..add34ba --- /dev/null +++ b/index.html @@ -0,0 +1,35 @@ + + + + BaseBand download server + + +

BaseBand downloads

+ + This website serves the version information and downloads of BaseBand. + +

1.12.2

+ +

Artifacts

+ + +

Version information

+ /1.12.2/branches + +

Ednieva

+ +

Artifacts

+ + +

Version information

+ /ednieva/branches + + diff --git a/scripts/push_file.sh b/scripts/push_file.sh new file mode 100644 index 0000000..882b921 --- /dev/null +++ b/scripts/push_file.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# DO NOT RUN THIS MANUALLY. PUSH TO RELEASE INSTEAD. ( <- unless there is an emergency.) + + +echo "$SSH_PRIVATEKEY" > ssh_key +chmod 700 ssh_key +scp -o StrictHostKeyChecking=no -i ssh_key -P "$BB_PORT" "$1" "root@$BB_HOST:$BB_PATH" && +(ssh -o StrictHostKeyChecking=no -i ssh_key -p "$BB_PORT" "root@$BB_HOST" "cd $BB_PATH && bash reload.sh" || true) +rm ssh_key \ No newline at end of file diff --git a/scripts/webhook.sh b/scripts/webhook.sh new file mode 100644 index 0000000..218d9f6 --- /dev/null +++ b/scripts/webhook.sh @@ -0,0 +1 @@ +curl -i -s -o /dev/null -H "Accept: application/json" -H "Content-Type:application/json" -X POST --data "{\"content\": \"$*\n on $(basename "$(git describe --always --all)") with \`$(git log --no-abbrev --oneline | head -n1 | sed -E 's/\w+ (.*)/\1/g')\`\n at $(date)\"}" https://discord.com/api/webhooks/1250323633205940244/yu1v_moeBxWi4YWaRK_s4tNAXUGUJml-E2PbhToccVFo1Ax2_6Iq6R6lEONCKikHBBn4 \ No newline at end of file diff --git a/server.spl b/server.spl new file mode 100644 index 0000000..5f5b15b --- /dev/null +++ b/server.spl @@ -0,0 +1,109 @@ + +"#httpserver/base.spl" import +"#httpserver/static.spl" import + +use net:http:Server +1048576 net:http:server:=bufsize + +construct Branch { + name + commit + ; + construct { this | with name commit this ; + name this:=name + commit this:=commit + this + } +} + +construct Branches { + main + release + loader + ; + construct { this | with dir this ; + func read-commit { s | with file ; + [ "unzip" "-p" file "commit" ] StreamTypes:cmd:create:read-to-end<32>:to-str + } + "Loader" dir "/BaseBand-Loader.jar" concat read-commit Branch:new this:=loader + "Broadway" dir "/BaseBand-release.jar" concat read-commit Branch:new this:=release + "Iceland" dir "/BaseBand-main.jar" concat read-commit Branch:new this:=main + this properties props-to-json + } +} + +construct Object404 { + error + ; + construct { this | with this ; + "Endpoint not found" this:=error + this properties props-to-json + } +} + +construct Refreshed { + ok + ; + construct { this | with this ; + "true" this:=ok + this properties props-to-json + } +} + +func props-to-json { | with props ; + props:last:get<1> dup null eq not if { + "\"" swap _str :replace<"\\" "\\\\">:replace<"\"" "\\\""> concat "\"" concat 2 stop + } pop + "{" + props + :iter + :filter<{ b | :to-stack pop with key ; key ":" eq not key ";" eq not and }> + :map<{ s | + :to-stack with key value ; + "\"" + key :replace<"\\" "\\\\">:replace<"\"" "\\\""> concat + "\": " concat + value properties props-to-json concat + }> + :join<", "> concat + "}" concat +} + +func main { exitcode | with args ; + def server Server:new<"::0" 40002> =server + while { 1 } { + server:accept &handle-client fork; + } +} + +func dir { | with client dir location ; + dir "/BaseBand-release.jar" concat location "/download/client/release" concat client:serve-file-cached;<"application/octet-stream"> + dir "/BaseBand-main.jar" concat location "/download/client/main" concat client:serve-file-cached;<"application/octet-stream"> + dir "/BaseBand-Loader.jar" concat location "/download/loader" concat client:serve-file-cached;<"application/octet-stream"> + + location "/branches" concat client:path eq if { + dir Branches:new client:write-ok:write-content-type<"application/json">:write-str-body:finish; + } + +} + +func handle-client { | with client ; + client:read; + "index.html" "/" client:serve-html-cached; + + client "rewrite" "/1.12.2" dir + + client "ednieva" "/ednieva" dir + + "/refresh" client:path eq if { + "refresh" println; + client:server:cached-files if { + client:server:cached-files:clear; + } + Refreshed:new client:write-ok:write-content-type<"application/json">:write-str-body:finish; + } + + client:wrote-body not if { + Object404:new client:write-head<404 "Not Found">:write-content-type<"application/json">:write-str-body:finish; + } +}