Something went wrong. Try again.
A Bsky-like frontend using the atprotocol natively.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316[ { "type": "variable", "id": "2d786ff1-ca83-49eb-92e2-fd57691e658b", "variables": { "OAUTH_DOMAIN": "foxsky.app", "DEEP_LINK_HOST": "foxsky.app" } }, { "type": "worker", "id": "9f73307f-3fc3-49a7-8654-7b0b3109721f", "name": "Build", "children": [ { "type": "step", "id": "595fa7fa-18ee-4878-ac34-383d4b3f4e2e", "name": "Checkout", "tasks": [ { "type": "checkout", "id": "cf36cae6-c292-4418-b547-a8cbb219af29" }, { "type": "cmd", "id": "74186f82-af65-44f2-9f8f-da5a7abb4eb0", "cmd": [ "source /home/ubuntu1/.nvm/nvm.sh && nvm use --lts" ] }, { "type": "cmd", "id": "7d19dfc2-9656-46bb-b3be-c6ca3141ae4a", "cmd": [ "source /home/ubuntu1/.nvm/nvm.sh && npm install --force" ] }, { "type": "cmd", "id": "a1b2c3d4-e5f6-4a78-b9c0-d1e2f3a4b5c6", "cmd": [ "source /home/ubuntu1/.nvm/nvm.sh && npm test" ] }, { "type": "putvarfile", "id": "8472070d-c18a-4308-b804-0a4dac9e3510", "files": [ "src/hooks/useAndroidBackButton.ts" ] }, { "type": "cmd", "id": "816eb02b-f211-4dd4-a62f-7f4b71a60f82", "cmd": [ "source /home/ubuntu1/.nvm/nvm.sh && OAUTH_DOMAIN=foxsky.app DEEP_LINK_HOST=foxsky.app npm run build" ] }, { "type": "asset", "id": "bbcd75ff-e0d4-4db7-aa04-90dcaf0d3562", "files": [ "dist/" ], "prefix": "" } ] } ], "image": "build-container-node" }, { "type": "worker", "id": "a3e4f5b6-7890-4c12-d8e4-5f6a7b8c9d0e", "name": "Build Android", "children": [ { "type": "step", "id": "b4f5a6c7-8901-4d23-e9f5-6a7b8c9d0e1f", "name": "Android APK Build", "tasks": [ { "type": "variable", "id": "ec24b1ff-75a8-4af0-97d9-ecfce78b0b57", "variables": { "KEYSTORE_BASE64": "ENC[v1]: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:XPx8EV1NcQppc7CD:", "GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64": "ENC[v1]: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:XRbQNarrW5S27ewk:", "KEYSTORE_PASSWORD": "ENC[v1]:zcGHXxrM6EydHTq2LCNXlPUaeY6wuGCmQUWs:oBscuSgmnpE5nR83:", "KEYSTORE_ALIAS": "upload" } }, { "type": "checkout", "id": "c5a6b7d8-9012-4e34-f0a6-7b8c9d0e1f2a" }, { "type": "cmd", "id": "d6b7c8e9-0123-4f45-a1b7-8c9d0e1f2a3b", "cmd": [ "source /home/ubuntu1/.nvm/nvm.sh && nvm use --lts" ] }, { "type": "cmd", "id": "e7c8d9f0-1234-4a56-b2c8-9d0e1f2a3b4c", "cmd": [ "source /home/ubuntu1/.nvm/nvm.sh && npm install --force" ] }, { "type": "cmd", "id": "a1b2c3d4-e5f6-4a78-b9c0-d1e2f3a4b5c7", "cmd": [ "source /home/ubuntu1/.nvm/nvm.sh && npm test" ] }, { "type": "cmd", "id": "f8d9e0a1-2345-4b67-c3d9-0e1f2a3b4c5d", "cmd": [ "curl -fsSL https://api.adoptium.net/v3/binary/latest/21/ga/linux/x64/jdk/hotspot/normal/eclipse -o /tmp/jdk21.tar.gz && mkdir -p /tmp/jdk21 && tar xzf /tmp/jdk21.tar.gz -C /tmp/jdk21 --strip-components=1 && echo \"JDK installed: $(/tmp/jdk21/bin/java --version)\"" ] }, { "type": "cmd", "id": "f9e0a1b2-3456-4c78-d4e0-1f2a3b4c5d6e", "cmd": [ "export JAVA_HOME=/tmp/jdk21 && export PATH=$JAVA_HOME/bin:$PATH && if [ -n \"${KEYSTORE_BASE64}\" ]; then echo \"${KEYSTORE_BASE64}\" | tr -d '\\n\\r ' | base64 -d > /tmp/release.keystore && mkdir -p public/.well-known && /tmp/jdk21/bin/keytool -list -v -keystore /tmp/release.keystore -alias ${KEYSTORE_ALIAS:-upload} -storepass \"${KEYSTORE_PASSWORD}\" 2>/dev/null | grep -oP 'SHA256: \\K[A-Fa-f0-9:]+' | head -1 > /tmp/sha256_fingerprint.txt && FINGERPRINT=$(cat /tmp/sha256_fingerprint.txt) && echo \"SHA-256 fingerprint: ${FINGERPRINT}\" && echo '[{\"relation\":[\"delegate_permission/common.handle_all_urls\"],\"target\":{\"namespace\":\"android_app\",\"package_name\":\"foxsky.jakefox.de\",\"sha256_cert_fingerprints\":[\"'\"${FINGERPRINT}\"'\"]}}]' > public/.well-known/assetlinks.json && echo \"Generated public/.well-known/assetlinks.json for ${DEEP_LINK_HOST:-foxsky.app}\" && cat public/.well-known/assetlinks.json; else echo 'No KEYSTORE_BASE64 - skipping assetlinks.json generation'; fi" ] }, { "type": "putvarfile", "id": "a1b2c3d4-e5f6-4a78-b9c0-d1e2f3a4b5c8", "files": [ "src/hooks/useAndroidBackButton.ts" ] }, { "type": "cmd", "id": "a2b3c4d5-e6f7-4a89-b0c1-d2e3f4a5b6c7", "cmd": [ "source /home/ubuntu1/.nvm/nvm.sh && OAUTH_DOMAIN=foxsky.app DEEP_LINK_HOST=foxsky.app npm run build" ] }, { "type": "cmd", "id": "1a0f2b3c-4567-4d89-e5f1-2a3b4c5d6e7f", "cmd": [ "mkdir -p /tmp/android-sdk/cmdline-tools && curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -o /tmp/cmdline-tools.zip && cd /tmp/android-sdk/cmdline-tools && /tmp/jdk21/bin/jar xf /tmp/cmdline-tools.zip && mv cmdline-tools latest && chmod -R +x /tmp/android-sdk/cmdline-tools/latest/bin/ && echo \"Android SDK cmdline-tools installed\"" ] }, { "type": "cmd", "id": "2b1a3c4d-5678-4e90-a0f2-3b4c5d6e7f0a", "cmd": [ "export JAVA_HOME=/tmp/jdk21 && export PATH=$JAVA_HOME/bin:$PATH && export ANDROID_HOME=/tmp/android-sdk && export ANDROID_SDK_ROOT=$ANDROID_HOME && chmod -R +x $ANDROID_HOME/cmdline-tools/latest/bin/ && yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses > /dev/null 2>&1 && $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager \"platforms;android-35\" \"build-tools;35.0.0\" \"platform-tools\"" ] }, { "type": "cmd", "id": "3c2b4d5e-6789-4f01-b1a3-4c5d6e7f0a1b", "cmd": [ "source /home/ubuntu1/.nvm/nvm.sh && nvm use --lts && if [ ! -d android ]; then npx cap add android; fi && npx cap sync android" ] }, { "type": "cmd", "id": "4d3c5e6f-7890-4a12-c2b4-5d6e7f0a1b2c", "cmd": [ "export JAVA_HOME=/tmp/jdk21 && export PATH=$JAVA_HOME/bin:$PATH && export ANDROID_HOME=/tmp/android-sdk && export ANDROID_SDK_ROOT=$ANDROID_HOME && export VERSION_CODE=$(date +%s) && export VERSION_NAME=\"$(date +%Y.%m.%d)\" && echo sdk.dir=/tmp/android-sdk > android/local.properties && cd android && chmod +x gradlew && if [ -n \"${KEYSTORE_BASE64}\" ]; then echo \"${KEYSTORE_BASE64}\" | tr -d '\\n\\r ' | base64 -d > /tmp/release.keystore && echo \"Keystore decoded ($(wc -c < /tmp/release.keystore) bytes)\" && echo \"Signing with: alias=${KEYSTORE_ALIAS}\" && ./gradlew bundleRelease --no-daemon -PKEYSTORE_PATH=/tmp/release.keystore -PKEYSTORE_PASSWORD=${KEYSTORE_PASSWORD} -PKEYSTORE_ALIAS=${KEYSTORE_ALIAS} -PKEYSTORE_ALIAS_PASSWORD=${KEYSTORE_PASSWORD} -PDEEP_LINK_HOST=${DEEP_LINK_HOST:-foxsky.app}; else echo \"No KEYSTORE_BASE64 - building debug APK\" && ./gradlew assembleDebug --no-daemon -PDEEP_LINK_HOST=${DEEP_LINK_HOST:-foxsky.app}; fi" ] }, { "type": "asset", "id": "5e4d6f7a-8901-4b23-d3c5-6e7f0a1b2c3d", "files": [ "android/app/build/outputs/bundle/release/app-release.aab" ], "prefix": "" }, { "type": "cmd", "id": "7a1b2c3d-4567-4d89-e0f1-2a3b4c5d6e7f", "cmd": [ "echo \"${KEYSTORE_BASE64}\" | tr -d '\\n\\r ' | base64 -d > /tmp/release.keystore" ] }, { "type": "cmd", "id": "08183649-acee-4e33-b02f-a798e32feb5d", "cmd": [ "source /home/ubuntu1/.nvm/nvm.sh && nvm use --lts && if [ -n \"${KEYSTORE_BASE64}\" ] && [ -f android/app/build/outputs/bundle/release/app-release.aab ]; then GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64=${GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64} node scripts/upload-to-play-store.mjs; else echo \"Skipping Play Store upload: no keystore or no AAB found\"; fi" ] } ] } ], "image": "build-container-node" }, { "type": "worker", "id": "3eecf3fb-11e6-4024-a52f-64a34dda2d73", "name": "Deploy", "children": [ { "type": "deployment", "id": "Fox_Sky_Deploy", "name": "FoxSky", "token": "Nginx_^ixX5qY)12_4jwAld0yUm%5WrHj*lQaE", "down": [], "up": [ { "type": "upload", "id": "17fe0d51-a6b0-4d61-aa65-aa98cd40fd3f", "from": "dist/", "to": "/var/www/bsky/" } ], "update": [], "status": [] } ], "depends": [ "Build" ] }, { "type": "worker", "id": "2f4c4b38-8a91-4367-a1f1-3ce79a0b0061", "name": "Build OG", "children": [ { "type": "step", "id": "c0c83368-f5c7-413a-be4c-f6a950cfad1e", "name": "Build", "tasks": [ { "type": "variable", "id": "6103ee6b-f57f-487b-8f44-5b43b3e1b06d", "variables": { "docker_container_name": "foxsky-og" } }, { "type": "checkout", "id": "b534b29a-1c47-4677-bf6a-458faae0f434" }, { "type": "cmd", "id": "0deffc01-e746-41dc-953a-7ecca32c62c7", "cmd": [ "screen -dmS docker sudo dockerd --storage-driver=vfs" ] }, { "type": "cmd", "id": "26ffcd8e-15f9-4b5c-aea1-7b5ac3067b33", "cmd": [ "sleep 5" ] }, { "type": "task", "id": "210fa75f-fb9d-494a-b393-288644416749", "tasks": [ "dockerLogin" ] }, { "type": "cmd", "id": "0375bbcd-4f6e-4496-a2fb-762915a44a6a", "cmd": [ "sudo docker pull repo.zenzon.net/${docker_container_name}" ] }, { "type": "cmd", "id": "40231473-4d80-4c95-abdc-1f151e790c76", "cmd": [ "cd og-server && sudo docker build --cache-from=repo.zenzon.net/${docker_container_name} -t ${docker_container_name} ." ] }, { "type": "cmd", "id": "1a8a74bc-c853-4f7e-bb06-aa113f977cac", "cmd": [ "sudo docker tag ${docker_container_name} repo.zenzon.net/${docker_container_name}" ] }, { "type": "cmd", "id": "8f91d5cd-0248-42c7-94a7-f4091206a13d", "cmd": [ "sudo docker push repo.zenzon.net/${docker_container_name}" ] }, { "type": "task", "id": "cff95d62-3779-4880-a95c-46a8d8e1d642", "tasks": [ "Cluster" ] }, { "type": "cmd", "id": "c6c10d35-92ab-493d-9938-54ba6ddcada6", "cmd": [ "curl -X POST -H \"X-Global-Auth-Key: ${cluster_key}\" -d \"repo.zenzon.net/${docker_container_name}:latest\" ${cluster} " ] } ] } ], "image": "build-container-node" }]