Something went wrong. Try again.
A fork of @slices.network/slices forked from slices.network/slices
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159name: Build and Deploy Slices API
on: workflow_dispatch: pull_request: branches: [ main ] paths: [ 'api/**', 'packages/lexicon-rs/**' ] push: branches: [ main ] paths: [ 'api/**', 'packages/lexicon-rs/**' ]
jobs: build: runs-on: ubuntu-latest defaults: run: working-directory: api
steps: - name: Checkout code uses: actions/checkout@v4
- name: Install Nix uses: DeterminateSystems/nix-installer-action@main with: logger: pretty
- name: Setup Nix cache uses: DeterminateSystems/magic-nix-cache-action@main
- name: Check flake run: nix flake check --refresh
- name: Build Rust binary run: nix build .#slices
- name: Build Docker image run: nix build .#slicesImg
- name: Load Docker image run: docker load < result
- name: Start PostgreSQL for testing run: | docker run -d --name postgres-test \ -e POSTGRES_DB=slice_test \ -e POSTGRES_USER=slice \ -e POSTGRES_PASSWORD=slice_test_password \ -p 5432:5432 \ postgres:15
# Wait for PostgreSQL to start sleep 10
- name: Test Docker image run: | # Check PostgreSQL is running echo "Checking PostgreSQL status..." docker ps | grep postgres-test docker logs postgres-test
# Test PostgreSQL connection echo "Testing PostgreSQL connection..." docker exec postgres-test psql -U slice -d slice_test -c "SELECT version();"
# Start the Slice container with PostgreSQL backend echo "Starting Slice container..." docker run -d --name slice-test -p 8080:8080 \ -e HTTP_PORT=8080 \ -e DATABASE_URL=postgresql://slice:slice_test_password@host.docker.internal:5432/slice_test \ --add-host host.docker.internal:host-gateway \ slices:latest
# Wait for the service to start and show logs echo "Waiting for service to start..." sleep 10
echo "Checking all containers (including exited)..." docker ps -a | grep -E "(slice-test|postgres-test)" || true
echo "Checking Slice container status..." docker ps | grep slice-test || echo "Slice container not running!"
echo "Slice container logs:" docker logs slice-test 2>&1 || echo "Failed to get logs"
echo "Checking if slice container exited:" docker inspect slice-test --format='{{.State.Status}}' || echo "Container not found" docker inspect slice-test --format='{{.State.ExitCode}}' || echo "No exit code"
# Additional wait sleep 10
echo "Final Slice container logs:" docker logs slice-test 2>&1 || echo "Failed to get final logs"
# Test the root endpoint with verbose output echo "Testing root endpoint..." curl -v -f http://localhost:8080 || { echo "Curl failed, showing final logs:" docker logs slice-test docker logs postgres-test exit 1 }
# Stop test containers docker stop slice-test postgres-test docker rm slice-test postgres-test
- name: Save Docker image as artifact run: docker save slices:latest | gzip > slice-image.tar.gz
- name: Upload Docker image artifact uses: actions/upload-artifact@v4 with: name: slice-docker-image path: api/slice-image.tar.gz retention-days: 1
deploy: # if: github.ref == 'refs/heads/main' needs: build runs-on: ubuntu-latest defaults: run: working-directory: api
steps: - name: Checkout code uses: actions/checkout@v4
- name: Download Docker image artifact uses: actions/download-artifact@v4 with: name: slice-docker-image path: api/
- name: Load Docker image run: docker load < slice-image.tar.gz
- name: Tag for Fly.io run: docker tag slices:latest registry.fly.io/slices-api:latest
- name: Setup Fly CLI uses: superfly/flyctl-actions/setup-flyctl@master
- name: Login to Fly.io registry run: flyctl auth docker env: FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
- name: Push to Fly.io registry run: docker push registry.fly.io/slices-api:latest
- name: Deploy to Fly.io run: flyctl deploy --image registry.fly.io/slices-api:latest env: FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}