diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index bd8e8b04..03f8ec6b 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -21,4 +21,4 @@ jobs: uses: golangci/golangci-lint-action@v3 with: version: latest - working-directory: cadence/server/ + working-directory: src/server/ diff --git a/Makefile b/Makefile index 6c4259d5..37f4db2c 100644 --- a/Makefile +++ b/Makefile @@ -2,12 +2,12 @@ build-init: docker buildx create --platform linux/arm/v7,linux/amd64 --use --name multiarch build-cadence: - docker buildx build --push --platform linux/arm/v7,linux/amd64 --tag kenellorando/cadence:latest --tag kenellorando/cadence:$(VERSION) --file ./cadence/cadence.Dockerfile ./cadence/ + docker buildx build --push --platform linux/arm/v7,linux/amd64 --tag kenellorando/cadence:latest --tag kenellorando/cadence:$(VERSION) --file ./src/cadence.Dockerfile ./src/ build-cadence_icecast2: - docker buildx build --push --platform linux/arm/v7,linux/amd64 --tag kenellorando/cadence_icecast2:latest --tag kenellorando/cadence_icecast2:$(VERSION) --file ./cadence/icecast2.Dockerfile ./cadence/ + docker buildx build --push --platform linux/arm/v7,linux/amd64 --tag kenellorando/cadence_icecast2:latest --tag kenellorando/cadence_icecast2:$(VERSION) --file ./src/icecast2.Dockerfile ./src/ build-cadence_liquidsoap: - docker buildx build --push --platform linux/arm/v7,linux/amd64 --tag kenellorando/cadence_liquidsoap:latest --tag kenellorando/cadence_liquidsoap:$(VERSION) --file ./cadence/liquidsoap.Dockerfile ./cadence/ + docker buildx build --push --platform linux/arm/v7,linux/amd64 --tag kenellorando/cadence_liquidsoap:latest --tag kenellorando/cadence_liquidsoap:$(VERSION) --file ./src/liquidsoap.Dockerfile ./src/ build-all: build-cadence build-cadence_icecast2 build-cadence_liquidsoap diff --git a/README.md b/README.md index ece6b1d6..4327bfec 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ **Cadence** (or *CadenceRadio*) is an all-in-one internet radio suite. -The project ships with *Icecast* and *Liquidsoap* working out-of-the-box, made complete with a *Cadence API* providing library search, song request, album artwork, and real-time stream information in a browser UI. Install and deploy in minutes. +The project ships *Icecast* and *Liquidsoap* working out-of-the-box, made complete by a *Cadence API* providing song request, library search, album artwork, and real-time stream information in a browser UI. **See a live demo on [cadenceradio.com](https://cadenceradio.com/)!** @@ -10,7 +10,7 @@ The project ships with *Icecast* and *Liquidsoap* working out-of-the-box, made c ## 🏃 Get Started -An interactive installation script is provided. Users familiar with Docker can be up and running in ~5 minutes. Alternate installation methods, including manual configuration and Kubernetes deployments, are respectively described on the [Installation Guide](https://github.com/kenellorando/cadence/wiki/Installation) and in [cadence-k8s](https://github.com/kenellorando/cadence-k8s). +An interactive installation script is provided. Users familiar with Docker can be up and running in ~5 minutes. ### Server Preparation @@ -26,9 +26,11 @@ $ chmod +x ./install.sh $ ./install.sh ``` -You will be prompted to provide the absolute path to a directory containing your music, a stream hostname, a rate limit timeout, a service password, and optional DNS. If you need help figuring out what values to use, refer to the [Installation Guide](https://github.com/kenellorando/cadence/wiki/Installation#interactive-prompt-guide). Your radio stack will automatically launch and Cadence's web UI will become accessible at `localhost:8080`. +You will be prompted to provide an absolute path to a directory containing music, a stream hostname, a rate limit timeout, a service password, and optional reverse proxy configuration. If you need help figuring out what values to use, refer to the [Installation Guide](https://github.com/kenellorando/cadence/wiki/Installation#interactive-prompt-guide). -After initial installation, simply run `docker compose pull` to check for container updates, then `docker compose up` to start your station again. Run `./install.sh` again at any time to reconfigure. If you make your own changes locally to Cadence's code, run `docker compose up --build` to build and run. +Your radio stack will automatically launch and Cadence's web UI will become accessible at `localhost:8080`. + +After initial installation, simply run `docker compose pull` to check for container updates, then `docker compose up` to start your station again. Run `./install.sh` again at any time to reconfigure. If you make changes to code locally, run `docker compose up --build` to build and run. ## 🔬 Technical Details @@ -40,7 +42,7 @@ After initial installation, simply run `docker compose pull` to check for contai -If you're interested in implementation details, [Cadence: Self-Hosted Web Radio Suite](https://kenellorando.notion.site/Cadence-Self-Hosted-Web-Radio-Suite-d1f0184b5eeb4882a3d6f78d582b2de6) does a dive into how a typical *Icecast/Liquidsoap* web radio works and the value Cadence provides. +If you're interested in implementation details, [this blog post](https://cuddle.fish/posts/2022-11-08-cadence) does a dive into how a basic *Icecast/Liquidsoap* web radio works and the value Cadence provides. ### API Reference for Custom Clients Cadence's GitHub Wiki also hosts an [API Reference](https://github.com/kenellorando/cadence/wiki/API-Reference) with complete request/response details, useful for anyone developing custom scripts or clients for their station. diff --git a/cadence/server/go.mod b/cadence/server/go.mod deleted file mode 100644 index 9ec13dad..00000000 --- a/cadence/server/go.mod +++ /dev/null @@ -1,19 +0,0 @@ -module github.com/kenellorando/cadence - -go 1.21 - -require ( - github.com/Jeffail/gabs v1.4.0 - github.com/dhowden/tag v0.0.0-20220618230019-adf36e896086 - github.com/fsnotify/fsnotify v1.6.0 - github.com/kenellorando/clog v0.0.0-20211118221226-cb7b5321ba72 - github.com/lib/pq v1.10.7 - github.com/redis/go-redis/v9 v9.0.2 - gopkg.in/antage/eventsource.v1 v1.0.0-20150318155416-803f4c5af225 -) - -require ( - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - golang.org/x/sys v0.0.0-20220908164124-27713097b956 // indirect -) diff --git a/cadence/server/go.sum b/cadence/server/go.sum deleted file mode 100644 index 96df0286..00000000 --- a/cadence/server/go.sum +++ /dev/null @@ -1,26 +0,0 @@ -github.com/Jeffail/gabs v1.4.0 h1://5fYRRTq1edjfIrQGvdkcd22pkYUrHZ5YC/H2GJVAo= -github.com/Jeffail/gabs v1.4.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc= -github.com/bsm/ginkgo/v2 v2.5.0 h1:aOAnND1T40wEdAtkGSkvSICWeQ8L3UASX7YVCqQx+eQ= -github.com/bsm/gomega v1.20.0 h1:JhAwLmtRzXFTx2AkALSLa8ijZafntmhSoU63Ok18Uq8= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dhowden/tag v0.0.0-20220618230019-adf36e896086 h1:ORubSQoKnncsBnR4zD9CuYFJCPOCuSNEpWEZrDdBXkc= -github.com/dhowden/tag v0.0.0-20220618230019-adf36e896086/go.mod h1:Z3Lomva4pyMWYezjMAU5QWRh0p1VvO4199OHlFnyKkM= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/kenellorando/clog v0.0.0-20211118221226-cb7b5321ba72 h1:5Z2kJVATMfhe5FgBmmeKcQmh3h5dVnNsm5A1xDJVBiw= -github.com/kenellorando/clog v0.0.0-20211118221226-cb7b5321ba72/go.mod h1:6+JdbVdzZr1fkpBAOqcPs04K3ajpn5cgLOvp1fIh5n0= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/redis/go-redis/v9 v9.0.2 h1:BA426Zqe/7r56kCcvxYLWe1mkaz71LKF77GwgFzSxfE= -github.com/redis/go-redis/v9 v9.0.2/go.mod h1:/xDTe9EF1LM61hek62Poq2nzQSGj0xSrEtEHbBQevps= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -golang.org/x/sys v0.0.0-20220908164124-27713097b956 h1:XeJjHH1KiLpKGb6lvMiksZ9l0fVUh+AmGcm0nOMEBOY= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -gopkg.in/antage/eventsource.v1 v1.0.0-20150318155416-803f4c5af225 h1:xy+AV3uSExoRQc2qWXeZdbhFGwBFK/AmGlrBZEjbvuQ= -gopkg.in/antage/eventsource.v1 v1.0.0-20150318155416-803f4c5af225/go.mod h1:SiXNRpUllqhl+GIw2V/BtKI7BUlz+uxov9vBFtXHqh8= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/config/cadence.env.example b/config/cadence.env.example index 57c9a8c0..2944bba3 100644 --- a/config/cadence.env.example +++ b/config/cadence.env.example @@ -8,7 +8,7 @@ POSTGRES_PASSWORD=CADENCE_PASS_EXAMPLE # Development CSERVER_DEVMODE=0 -CSERVER_VERSION=5.4.3 +CSERVER_VERSION=5.4.4 CSERVER_ROOTPATH=/cadence/server/ # Service Addresses diff --git a/config/icecast.xml.example b/config/icecast.xml.example index 89db7034..12068462 100644 --- a/config/icecast.xml.example +++ b/config/icecast.xml.example @@ -23,7 +23,7 @@ CADENCE_PASS_EXAMPLE - CADENCE_HOST_EXAMPLE + CADENCE_STREAM_HOST_EXAMPLE 8000 diff --git a/config/nginx.conf.example b/config/nginx.conf.example index 5c4ac3b5..f39df35b 100644 --- a/config/nginx.conf.example +++ b/config/nginx.conf.example @@ -6,7 +6,7 @@ http { # This server forwards requests to the Icecast service. server { listen 80; - server_name CADENCE_STREAM_DNS_EXAMPLE; + server_name CADENCE_STREAM_HOST_EXAMPLE; access_log off; location / { proxy_pass http://icecast2:8000/; @@ -16,7 +16,7 @@ http { # This server forwards requests to the API/UI server. server { listen 80; - server_name CADENCE_WEB_DNS_EXAMPLE; + server_name CADENCE_WEB_HOST_EXAMPLE; access_log off; # Server-sent event API needs special configuration to get through the proxy. location /api/radiodata/sse { diff --git a/docker-compose.yml b/docker-compose.yml index 335af318..fb371657 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,3 @@ -version: "3" services: redis: @@ -21,7 +20,7 @@ services: icecast2: build: - dockerfile: ./cadence/icecast2.Dockerfile + dockerfile: ./src/icecast2.Dockerfile image: kenellorando/cadence_icecast2:latest container_name: icecast2 restart: always @@ -35,13 +34,13 @@ services: liquidsoap: build: - dockerfile: ./cadence/liquidsoap.Dockerfile + dockerfile: ./src/liquidsoap.Dockerfile image: kenellorando/cadence_liquidsoap:latest container_name: liquidsoap restart: always volumes: - ./config/liquidsoap.liq:/etc/liquidsoap/cadence.liq - - /music:/music + - /music/:/music/ depends_on: - icecast2 expose: @@ -52,7 +51,7 @@ services: cadence: build: - context: ./cadence + context: ./src/ dockerfile: ./cadence.Dockerfile image: kenellorando/cadence container_name: cadence @@ -62,7 +61,7 @@ services: env_file: - ./config/cadence.env volumes: - - /music:/music + - /music/:/music/ depends_on: - icecast2 - liquidsoap @@ -73,6 +72,7 @@ services: external_services: nginx: + profiles: ["nginx"] image: nginx:latest volumes: - ./config/nginx.conf:/etc/nginx/nginx.conf diff --git a/docker-compose.yml.example b/docker-compose.yml.example index 23bda1a9..83761c31 100644 --- a/docker-compose.yml.example +++ b/docker-compose.yml.example @@ -1,4 +1,3 @@ -version: "3" services: redis: @@ -21,7 +20,7 @@ services: icecast2: build: - dockerfile: ./cadence/icecast2.Dockerfile + dockerfile: ./src/icecast2.Dockerfile image: kenellorando/cadence_icecast2:latest container_name: icecast2 restart: always @@ -35,7 +34,7 @@ services: liquidsoap: build: - dockerfile: ./cadence/liquidsoap.Dockerfile + dockerfile: ./src/liquidsoap.Dockerfile image: kenellorando/cadence_liquidsoap:latest container_name: liquidsoap restart: always @@ -52,7 +51,7 @@ services: cadence: build: - context: ./cadence + context: ./src/ dockerfile: ./cadence.Dockerfile image: kenellorando/cadence container_name: cadence @@ -73,6 +72,7 @@ services: external_services: nginx: + profiles: ["nginx"] image: nginx:latest volumes: - ./config/nginx.conf:/etc/nginx/nginx.conf diff --git a/install.sh b/install.sh index 313f6b7a..e9f75388 100755 --- a/install.sh +++ b/install.sh @@ -1,45 +1,42 @@ #!/bin/bash -echo "[1/5] Music Directory Target" -echo "Set the absolute path of a directory containing audio files (e.g. mp3, flac)" -echo "meant for radio play. Only files at the directory base will be seen, not those" -echo "in nested subdirectories." -echo "Example: /music/" +echo "***************************************************************" +echo "NOTE: If you need help determining configuration values to use," +echo "installation documentation is available on GitHub:" +echo "https://github.com/kenellorando/cadence/wiki/Installation" +echo "***************************************************************" +echo "" +echo "[1/5] Absolute Path to Music" +echo "Set an absolute path to a directory containing audio files (e.g. mp3, flac)" +echo "to be played on the radio. The target is not recursively searched." read -p " Music path: " CADENCE_PATH -echo "================================================================================" +echo "" echo "[2/5] Stream Host Address" -echo "Set the stream host address for Cadence Icecast. This may be a DNS name, public" -echo "IP, or private IP. Set this to localhost:8000 if your Cadence instance is meant" -echo "for local use only." -echo "Example: localhost:8000" -read -p " Stream address: " CADENCE_HOST -echo "================================================================================" +echo "Set the stream host address. This may be a DNS name, public IP, or private IP." +echo "Use localhost:8000 if your Cadence instance is meant for local use only." +read -p " Stream address: " CADENCE_STREAM_HOST +echo "" echo "[3/5] Rate Limiter Timeout" echo "Set a rate limit timeout in integer seconds. This prevents the same listener" echo "from requesting songs within the configured timeframe. Set to 0 to disable." -echo "Example: 180" read -p " Rate limit: " CADENCE_RATE -echo "================================================================================" +echo "" echo "[4/5] Radio Service Password" echo "Set a secure, unique service password. Input is hidden." read -s -p " Password: " CADENCE_PASS echo "" -echo "================================================================================" -echo "[5/5] Domain Names - LEAVE BLANK TO SKIP" -echo "OPTIONAL: if you are an advanced administrator routing DNS to your Cadence" -echo "stack, provide your domain names here. You will be prompted for two domains: one" -echo "for Cadence Icecast, one for Cadence web UI. Subdomains are acceptable." -read -p " Cadence Audio Stream Domain: " CADENCE_STREAM_DNS -read -p " Cadence Web UI Domain: " CADENCE_WEB_DNS - -if [ -z "$CADENCE_STREAM_DNS" ] -then - CADENCE_STREAM_DNS=stream.cadenceradio.com -fi +echo "" +echo "[5/5] Enable Reverse Proxy?" +echo "Do you want to enable a reverse proxy? Skip if you are broadcasting locally only" +echo "or have your own reverse proxy configured. Skip if you do not know what this means." +read -p " [y/N]: " ENABLE_REVERSE_PROXY -if [ -z "$CADENCE_WEB_DNS" ] +if [[ "$ENABLE_REVERSE_PROXY" =~ ^([yY])$ ]] then - CADENCE_WEB_DNS=cadenceradio.com + echo "Please provide the domain name you will use for Cadence UI." + read -p " Web UI Domain: " CADENCE_WEB_HOST +else + echo "No reverse proxy will be configured." fi cp ./config/cadence.env.example ./config/cadence.env @@ -52,16 +49,22 @@ sed -i 's|CADENCE_PASS_EXAMPLE|'"$CADENCE_PASS"'|g' ./config/cadence.env sed -i 's|CADENCE_PASS_EXAMPLE|'"$CADENCE_PASS"'|g' ./config/icecast.xml sed -i 's|CADENCE_PASS_EXAMPLE|'"$CADENCE_PASS"'|g' ./config/liquidsoap.liq sed -i 's|CADENCE_RATE_EXAMPLE|'"$CADENCE_RATE"'|g' ./config/cadence.env -sed -i 's|CADENCE_HOST_EXAMPLE|'"$CADENCE_HOST"'|g' ./config/icecast.xml +sed -i 's|CADENCE_STREAM_HOST_EXAMPLE|'"$CADENCE_STREAM_HOST"'|g' ./config/icecast.xml sed -i 's|CADENCE_PATH_EXAMPLE|'"$CADENCE_PATH"'|g' ./config/cadence.env sed -i 's|CADENCE_PATH_EXAMPLE|'"$CADENCE_PATH"'|g' ./config/liquidsoap.liq -sed -i 's|CADENCE_STREAM_DNS_EXAMPLE|'"$CADENCE_STREAM_DNS"'|g' ./config/nginx.conf -sed -i 's|CADENCE_WEB_DNS_EXAMPLE|'"$CADENCE_WEB_DNS"'|g' ./config/nginx.conf +sed -i 's|CADENCE_STREAM_HOST_EXAMPLE|'"$CADENCE_STREAM_HOST"'|g' ./config/nginx.conf +sed -i 's|CADENCE_WEB_HOST_EXAMPLE|'"$CADENCE_WEB_HOST"'|g' ./config/nginx.conf sed -i 's|CADENCE_PATH_EXAMPLE|'"$CADENCE_PATH"'|g' ./docker-compose.yml -echo "=========================================" +echo "" echo "Configuration completed." -echo "If it does not begin automatically, run 'docker compose up' to start Cadence." + docker compose down docker compose pull -docker compose up + +if [[ "$ENABLE_REVERSE_PROXY" =~ ^([yY])$ ]] +then + docker compose --profile nginx up +else + docker compose up +fi diff --git a/cadence/cadence.Dockerfile b/src/cadence.Dockerfile similarity index 100% rename from cadence/cadence.Dockerfile rename to src/cadence.Dockerfile diff --git a/cadence/icecast2.Dockerfile b/src/icecast2.Dockerfile similarity index 100% rename from cadence/icecast2.Dockerfile rename to src/icecast2.Dockerfile diff --git a/cadence/liquidsoap.Dockerfile b/src/liquidsoap.Dockerfile similarity index 94% rename from cadence/liquidsoap.Dockerfile rename to src/liquidsoap.Dockerfile index 11d0fe14..f6cd2f25 100644 --- a/cadence/liquidsoap.Dockerfile +++ b/src/liquidsoap.Dockerfile @@ -12,7 +12,7 @@ RUN ln -s /usr/bin/dpkg-split /usr/sbin/dpkg-split && \ RUN apt clean all RUN apt update RUN apt install liquidsoap=1.4.3-3 -y -RUN apt autoremove +RUN apt autoremove --purge EXPOSE 1234 USER liquidsoap CMD [ "liquidsoap", "-t", "/etc/liquidsoap/cadence.liq" ] diff --git a/cadence/server/api.go b/src/server/api.go similarity index 100% rename from cadence/server/api.go rename to src/server/api.go diff --git a/cadence/server/api_actions.go b/src/server/api_actions.go similarity index 100% rename from cadence/server/api_actions.go rename to src/server/api_actions.go diff --git a/cadence/server/db_postgres.go b/src/server/db_postgres.go similarity index 100% rename from cadence/server/db_postgres.go rename to src/server/db_postgres.go diff --git a/cadence/server/db_redis.go b/src/server/db_redis.go similarity index 100% rename from cadence/server/db_redis.go rename to src/server/db_redis.go diff --git a/src/server/go.mod b/src/server/go.mod new file mode 100644 index 00000000..b5741b39 --- /dev/null +++ b/src/server/go.mod @@ -0,0 +1,18 @@ +module github.com/kenellorando/cadence + +go 1.21 + +require ( + github.com/Jeffail/gabs v1.4.0 + github.com/dhowden/tag v0.0.0-20240417053706-3d75831295e8 + github.com/fsnotify/fsnotify v1.7.0 + github.com/lib/pq v1.10.9 + github.com/redis/go-redis/v9 v9.5.1 + gopkg.in/antage/eventsource.v1 v1.0.0-20150318155416-803f4c5af225 +) + +require ( + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + golang.org/x/sys v0.20.0 // indirect +) diff --git a/src/server/go.sum b/src/server/go.sum new file mode 100644 index 00000000..6b17411f --- /dev/null +++ b/src/server/go.sum @@ -0,0 +1,22 @@ +github.com/Jeffail/gabs v1.4.0 h1://5fYRRTq1edjfIrQGvdkcd22pkYUrHZ5YC/H2GJVAo= +github.com/Jeffail/gabs v1.4.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc= +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= +github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dhowden/tag v0.0.0-20240417053706-3d75831295e8 h1:OtSeLS5y0Uy01jaKK4mA/WVIYtpzVm63vLVAPzJXigg= +github.com/dhowden/tag v0.0.0-20240417053706-3d75831295e8/go.mod h1:apkPC/CR3s48O2D7Y++n1XWEpgPNNCjXYga3PPbJe2E= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/redis/go-redis/v9 v9.5.1 h1:H1X4D3yHPaYrkL5X06Wh6xNVM/pX0Ft4RV0vMGvLBh8= +github.com/redis/go-redis/v9 v9.5.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +gopkg.in/antage/eventsource.v1 v1.0.0-20150318155416-803f4c5af225 h1:xy+AV3uSExoRQc2qWXeZdbhFGwBFK/AmGlrBZEjbvuQ= +gopkg.in/antage/eventsource.v1 v1.0.0-20150318155416-803f4c5af225/go.mod h1:SiXNRpUllqhl+GIw2V/BtKI7BUlz+uxov9vBFtXHqh8= diff --git a/cadence/server/main.go b/src/server/main.go similarity index 100% rename from cadence/server/main.go rename to src/server/main.go diff --git a/cadence/server/public/css/main.css b/src/server/public/css/main.css similarity index 100% rename from cadence/server/public/css/main.css rename to src/server/public/css/main.css diff --git a/cadence/server/public/index.html b/src/server/public/index.html similarity index 95% rename from cadence/server/public/index.html rename to src/server/public/index.html index 5b27f935..6763b84f 100644 --- a/cadence/server/public/index.html +++ b/src/server/public/index.html @@ -70,8 +70,7 @@ diff --git a/cadence/server/public/js/aria.js b/src/server/public/js/aria.js similarity index 100% rename from cadence/server/public/js/aria.js rename to src/server/public/js/aria.js diff --git a/cadence/server/public/js/page.js b/src/server/public/js/page.js similarity index 100% rename from cadence/server/public/js/page.js rename to src/server/public/js/page.js diff --git a/cadence/server/public/static/blank.jpg b/src/server/public/static/blank.jpg similarity index 100% rename from cadence/server/public/static/blank.jpg rename to src/server/public/static/blank.jpg diff --git a/cadence/server/public/static/favicon.ico b/src/server/public/static/favicon.ico similarity index 100% rename from cadence/server/public/static/favicon.ico rename to src/server/public/static/favicon.ico diff --git a/cadence/server/public/static/splash.jpg b/src/server/public/static/splash.jpg similarity index 100% rename from cadence/server/public/static/splash.jpg rename to src/server/public/static/splash.jpg diff --git a/cadence/server/routes.go b/src/server/routes.go similarity index 100% rename from cadence/server/routes.go rename to src/server/routes.go