Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
c14265e
feat(submissions): initial impl
Fleeym Mar 12, 2026
a274620
chore: update deps
Fleeym Mar 12, 2026
9d90bbc
feat: add attachments
Fleeym Mar 12, 2026
17486fe
fix: sanitize comments
Fleeym Mar 12, 2026
8cb554b
fix: uhhh formatting
Fleeym Mar 12, 2026
d00aac9
chore: sqlx prepare
Fleeym Mar 12, 2026
8334ffb
fix: fix some permission issues
Fleeym Mar 12, 2026
fcb3058
chore: remove comment
Fleeym Mar 24, 2026
112f654
Merge branch 'main' into submission-thread
Fleeym Apr 14, 2026
24fbaf7
Merge branch 'main' into submission-thread
Fleeym Apr 14, 2026
72e8562
fix: storage fixes
Fleeym Apr 14, 2026
6b69932
fix: what
Fleeym Apr 14, 2026
1f7f6fc
feat: add audit tables for comments and submissions
Fleeym Apr 14, 2026
88c09c0
fix(submissions): allow index admins to comment on locked threads
Fleeym Apr 14, 2026
42dce49
feat: expose comment & submission audit
Fleeym Apr 21, 2026
40e8569
fix: simplify if let
Fleeym Apr 21, 2026
c07dac5
feat(threads): rework locking system
Fleeym Apr 22, 2026
26edc72
fix(threads): fix unnecessary string copy
Fleeym Apr 22, 2026
8916a69
feat(threads): add admin discord webhook
Fleeym Apr 22, 2026
bc64581
feat(threads): add new unverified version create event
Fleeym Apr 22, 2026
b3d7910
fix: fix ApiError::NotFound status code
Fleeym Apr 22, 2026
dfd0260
Merge branch 'main' into submission-thread
Fleeym Apr 22, 2026
988152f
fix: fix lockfile
Fleeym Apr 22, 2026
353fbe4
feat(threads): include attachments in comment payload
Fleeym Apr 22, 2026
cf952dc
fix(threads): don't require auth for comments
Fleeym Apr 22, 2026
e48c86d
fix: use chrono_dt_secs for new DateTImes
Fleeym Apr 25, 2026
263c4a0
fix: remove chrono_dt_secs from Row struct
Fleeym Apr 26, 2026
df5b951
fix: forgot one struct
Fleeym Apr 26, 2026
046f544
add has_accepted_mod to /v1/me
Fleeym Apr 26, 2026
8b2b042
Merge branch 'main' into submission-thread
Fleeym Apr 26, 2026
d6e016c
chore: sqlx prepare
Fleeym Apr 26, 2026
c8a9dbd
Merge branch 'main' into submission-thread
Fleeym Jun 19, 2026
f405409
fix(threads): fix admin webhook version
Fleeym Jun 19, 2026
ca6011f
chore: add INDEX_ADMIN_DISCORD_WEBHOOK_URL to .env.example
Fleeym Jun 19, 2026
b3c83dc
fix(threads): fix orphaned attachment file cleanup
Fleeym Jun 19, 2026
ac76a40
fix(threads): fix upload_attachments reading all uploaded images
Fleeym Jun 19, 2026
9147919
fix(threads): ensure file cleanup on upload_attachments rollback
Fleeym Jun 19, 2026
9e90f6b
feat(threads): return comment attachments ids
Fleeym Jun 22, 2026
db3b23b
feat(threads): turn submission get into find-or-create
Fleeym Jun 22, 2026
5809149
feat: add local file server for dev
Fleeym Jul 9, 2026
0cf7c33
Submission threads for pending mods (#60)
Fleeym Jul 9, 2026
41823c3
chore: version bump
Fleeym Jul 9, 2026
fc54fba
fix: acces
Fleeym Jul 9, 2026
2e8cd04
chore: version bump
Fleeym Jul 9, 2026
f817ce4
fix: only allow verified+ devs to comment
Fleeym Jul 9, 2026
60aefd2
docs: add actual ports to .env.example app url
Fleeym Jul 10, 2026
ac3158b
chore: improve docker image
Fleeym Jul 10, 2026
dc41c86
docs: improve docker documentation
Fleeym Jul 10, 2026
8354072
feat: basic migration to tracing
Fleeym Jul 10, 2026
522a1fa
feat: replace actix logger with tracing
Fleeym Jul 10, 2026
8b5f712
feat: add tracing::instrument to all handlers
Fleeym Jul 10, 2026
1ddca14
feat: implement tracing::instrument for DB layer
Fleeym Jul 10, 2026
84a5722
feat: log map_err calls that didn't use original err
Fleeym Jul 10, 2026
4c48856
chore: adapt deployment to tracing
Fleeym Jul 10, 2026
19c8e76
fix: remove instrument err from handlers + db
Fleeym Jul 10, 2026
d99bced
fix: actually read RUST_LOG / LOG_FORMAT
Fleeym Jul 11, 2026
63a8750
fix: actually fix EnvFilter setup
Fleeym Jul 11, 2026
757a569
Merge pull request #75 from geode-sdk/tracing-migration
Fleeym Jul 11, 2026
bb5ec1d
fix: simplify if let chain
Fleeym Jul 11, 2026
f97b35b
chore: bump all dependencies
Fleeym Jul 11, 2026
93ebd79
chore: version bump
Fleeym Jul 11, 2026
464f5ba
fix: set tracing_actix_web level to error
Fleeym Jul 11, 2026
cd8e97c
fix: add acquire_timeout for pgpool
Fleeym Jul 11, 2026
0080d5b
fix: remove some unused imports
Fleeym Jul 11, 2026
6738a72
chore: add LICENSE.txt
Fleeym Jul 11, 2026
f9b9d01
chore: version bump
Fleeym Jul 11, 2026
f2f59a1
chore: include static files in docker image
Fleeym Jul 11, 2026
d530d5e
chore: update deploy script to use docker
Fleeym Jul 11, 2026
d884f2a
fix: separate static from storage
Fleeym Jul 11, 2026
2e76679
chore: add postgres to docker-compose example
Fleeym Jul 11, 2026
19ca5a3
fix: make sure static-init actually completes
Fleeym Jul 11, 2026
f49457a
fix: map BadRequest to code 400 instead of 500
Fleeym Jul 12, 2026
0b3e0ec
fix: simplify actix error logging
Fleeym Jul 12, 2026
e5d24b7
feat: add back inspect_err to sqlx call sites
Fleeym Jul 12, 2026
7614809
chore: run cargo fmt
Fleeym Jul 12, 2026
c16261b
chore: order cargo.toml
Fleeym Jul 12, 2026
dc9d6a6
Merge branch 'r2' into r2-2
FireMario211 Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
# Set to 1 to run using 1 thread
APP_DEBUG=0
# Used for URL generation in downloads
APP_URL=http://localhost
FRONT_URL=http://localhost
APP_URL=http://localhost:3000
FRONT_URL=http://localhost:5173
DATABASE_URL=postgres://user:password@localhost/schema
PORT=8080

# Logging (see tracing/tracing-subscriber docs)
# RUST_LOG controls verbosity, e.g. "info", "debug", "info,sqlx=warn", "geode_index=debug"
RUST_LOG=info
# LOG_FORMAT: "text" (default, human-readable) or "json" (structured, for log aggregation)
LOG_FORMAT=text

# GitHub

GITHUB_CLIENT_ID=
Expand All @@ -14,6 +20,7 @@ GITHUB_CLIENT_SECRET=
# Discord

DISCORD_WEBHOOK_URL=
INDEX_ADMIN_DISCORD_WEBHOOK_URL=

# Config

Expand All @@ -22,9 +29,13 @@ MAX_MOD_FILESIZE_MB=250
# Globally disables download counting, in the event of abuse
DISABLE_DOWNLOAD_COUNTS=0

# Path where uploaded files are stored on disk (default: ./storage)
# The reverse proxy must serve {STORAGE_PATH}/submission_attachments/ at /storage/submission-attachments/
STORAGE_PATH=./storage

# Used for S3-compatible APIs (R2). Automatically disabled if S3_ENDPOINT_URL is not set.
S3_ENDPOINT_URL=
S3_BUCKET_NAME=
S3_REGION=
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_SECRET_ACCESS_KEY=
48 changes: 7 additions & 41 deletions .github/workflows/deploy.yaml
Original file line number Diff line number Diff line change
@@ -1,57 +1,23 @@
name: Deploy Index

on:
release:
types: [published]
workflow_run:
workflows: ["Publish Docker Image"]
types: [completed]
workflow_dispatch:

jobs:
deploy:
if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Get release tag
id: get_tag
run: |
if [ "${{ github.event_name }}" == "release" ]; then
echo "tag=${{ github.event.release.tag_name }}" >> $GITHUB_OUTPUT
else
# For workflow_dispatch, get the latest release tag
echo "tag=$(gh release list --limit 1 --json tagName --jq '.[0].tagName')" >> $GITHUB_OUTPUT
fi
env:
GH_TOKEN: ${{ github.token }}

- name: Download release assets
run: |
mkdir -p ./artifacts/x86_64 ./artifacts/aarch64
gh release download ${{ steps.get_tag.outputs.tag }} \
--pattern "geode-index-${{ steps.get_tag.outputs.tag }}-linux-x86_64" \
--dir ./artifacts/x86_64
gh release download ${{ steps.get_tag.outputs.tag }} \
--pattern "geode-index-${{ steps.get_tag.outputs.tag }}-linux-aarch64" \
--dir ./artifacts/aarch64
chmod +x ./artifacts/x86_64/geode-index-${{ steps.get_tag.outputs.tag }}-linux-x86_64
chmod +x ./artifacts/aarch64/geode-index-${{ steps.get_tag.outputs.tag }}-linux-aarch64
env:
GH_TOKEN: ${{ github.token }}

- name: Create ssh key
run: |
install -m 600 -D /dev/null ~/.ssh/id_rsa
echo "${{ secrets.PRIVATE_KEY }}" > ~/.ssh/id_rsa
ssh-keyscan -p ${{ secrets.INDEX_SSH_PORT }} -H ${{ secrets.INDEX_SERVER }} > ~/.ssh/known_hosts

- name: Upload target to server
id: upload
run: |
rsync -avz -e "ssh -p ${{ secrets.INDEX_SSH_PORT }} -i ~/.ssh/id_rsa" --owner --group --chmod=775 --chown=${{ secrets.INDEX_RUN_USER }}:${{ secrets.INDEX_RUN_GROUP }} ./artifacts/${{ secrets.INDEX_DEPLOY_ARCH }}/geode-index-${{ steps.get_tag.outputs.tag }}-linux-${{ secrets.INDEX_DEPLOY_ARCH }} ${{ secrets.INDEX_USER }}@${{ secrets.INDEX_SERVER }}:${{ secrets.INDEX_COPY_LOCATION }}
rsync -avz -e "ssh -p ${{ secrets.INDEX_SSH_PORT }} -i ~/.ssh/id_rsa" --owner --group --chmod=775 --chown=${{ secrets.INDEX_RUN_USER }}:${{ secrets.INDEX_RUN_GROUP }} ./migrations/* ${{ secrets.INDEX_USER }}@${{ secrets.INDEX_SERVER }}:${{ secrets.MIGRATIONS_COPY_LOCATION }}
rsync -avz -e "ssh -p ${{ secrets.INDEX_SSH_PORT }} -i ~/.ssh/id_rsa" --owner --group --chmod=775 --chown=${{ secrets.INDEX_RUN_USER }}:${{ secrets.INDEX_RUN_GROUP }} ./storage/static ${{ secrets.INDEX_USER }}@${{ secrets.INDEX_SERVER }}:${{ secrets.STORAGE_STATIC_COPY_LOCATION }}

- name: Run update script
- name: Deploy
run: |
ssh -p ${{ secrets.INDEX_SSH_PORT }} ${{ secrets.INDEX_USER }}@${{ secrets.INDEX_SERVER }} "cd ${{ secrets.INDEX_UPDATE_SCRIPT_PATH }} && ./update.sh"
if: steps.upload.outcome == 'success'
ssh -p ${{ secrets.INDEX_SSH_PORT }} -i ~/.ssh/id_rsa ${{ secrets.INDEX_USER }}@${{ secrets.INDEX_SERVER }} \
"cd ${{ secrets.INDEX_DIR }} && docker compose pull && docker compose up -d --wait"
12 changes: 11 additions & 1 deletion .github/workflows/publish-docker-image.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,14 +83,24 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Resolve build metadata
id: meta
run: |
echo "date=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> "$GITHUB_OUTPUT"
echo "revision=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"

- name: Build and push by digest
id: build
uses: docker/build-push-action@v6
with:
context: .
push: true
platforms: ${{ matrix.platform }}
build-args: LIBC=${{ matrix.libc }}
build-args: |
LIBC=${{ matrix.libc }}
VERSION=${{ needs.resolve-tag.outputs.tag }}
REVISION=${{ steps.meta.outputs.revision }}
BUILD_DATE=${{ steps.meta.outputs.date }}
# Push to a digest-only ref (no tag) so the merge job can assemble
# the final multi-arch manifest cleanly
outputs: type=image,name=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading