name: Deploy on: push: branches: [ "main" ] env: CARGO_TERM_COLOR: always jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Cache Cargo binaries uses: actions/cache@v3 with: path: ~/.cargo/bin key: ${{ runner.os }}-cargo-bin - uses: extractions/setup-just@v1 - uses: oven-sh/setup-bun@v1 with: bun-version: latest - name: Install frontend run: bun install --frozen-lockfile --cwd frontend - name: Build frontend run: just build-frontend - run: rustup toolchain install stable --profile minimal - uses: Swatinem/rust-cache@v2 - name: Install sqlx-cli run: cargo install sqlx-cli --no-default-features --features native-tls,postgres - name: Run tests run: cargo test - name: Build backend run: cargo build --release - name: Install SSH Key uses: shimataro/ssh-key-action@v2 with: key: ${{ secrets.SSH_PRIVATE_KEY }} known_hosts: 'just-a-placeholder-so-we-dont-get-errors' - name: Adding Known Hosts run: ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts - name: Deploy frontend with rsync run: rsync -avz ./static/ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/home/crawlnicle/crawlnicle/static/ - name: Deploy backend with rsync run: rsync -avz ./target/release/crawlnicle ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/home/crawlnicle/crawlnicle/target/release/crawlnicle # TODO: fancy blue/green deployments - name: Restart the server run: ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} 'sudo /usr/bin/systemctl restart crawlnicle.service'