Skip to content

style: run cargo fmt on backend and contracts to pass Format Check CI #7

style: run cargo fmt on backend and contracts to pass Format Check CI

style: run cargo fmt on backend and contracts to pass Format Check CI #7

Workflow file for this run

name: Deploy with Vault Secrets

Check failure on line 1 in .github/workflows/vault-deploy.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/vault-deploy.yml

Invalid workflow file

(Line: 30, Col: 13): Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.VAULT_ADDR == '', (Line: 36, Col: 13): Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.VAULT_ADDR != ''
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
env:
CARGO_TERM_COLOR: always
RUST_LOG: backend=info,tower_http=debug
jobs:
test:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write # Required for GitHub OIDC token
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
- name: Set fallback test secrets when Vault is unavailable
if: ${{ secrets.VAULT_ADDR == '' }}
run: |
echo "JWT_SECRET=fallback-test-secret-value-at-least-32-characters" >> $GITHUB_ENV
echo "DATABASE_URL=sqlite::memory:" >> $GITHUB_ENV
- name: Get Vault Token via GitHub OIDC
if: ${{ secrets.VAULT_ADDR != '' }}
id: vault-auth
run: |
TOKEN=$(curl -s -X POST \
"${{ secrets.VAULT_ADDR }}/v1/auth/jwt/login" \
-H "Content-Type: application/json" \
-d "{
\"role\": \"stellar-github\",
\"jwt\": \"${{ secrets.GITHUB_TOKEN }}\"
}" | jq -r '.auth.client_token // empty')
if [ -z "$TOKEN" ]; then
echo "Failed to obtain Vault token"
exit 1
fi
echo "::add-mask::$TOKEN"
echo "VAULT_TOKEN=$TOKEN" >> $GITHUB_ENV
echo "token_obtained=true" >> $GITHUB_OUTPUT
- name: Read secrets from Vault
if: steps.vault-auth.outputs.token_obtained == 'true'
id: vault-secrets
run: |
# Read JWT_SECRET from Vault
JWT_SECRET=$(curl -s -X GET \
"${{ secrets.VAULT_ADDR }}/v1/data/secret/stellar/jwt_secret" \
-H "X-Vault-Token: $VAULT_TOKEN" | jq -r '.data.data.value')
echo "::add-mask::$JWT_SECRET"
echo "JWT_SECRET=$JWT_SECRET" >> $GITHUB_ENV
# Read DATABASE_URL from env (already set in secrets)
echo "DATABASE_URL=${{ secrets.DATABASE_URL }}" >> $GITHUB_ENV
- name: Run tests
run: |
cargo test --lib --verbose
working-directory: backend
env:
JWT_SECRET: ${{ env.JWT_SECRET }}
DATABASE_URL: ${{ env.DATABASE_URL }}
- name: Build backend
run: cargo build --release
working-directory: backend
- name: Check formatting
run: cargo fmt --all -- --check
working-directory: backend
- name: Run clippy
run: cargo clippy --all-targets --all-features -- -D warnings
working-directory: backend
vault-integration:
runs-on: ubuntu-latest
needs: test
if: github.ref == 'refs/heads/main'
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v4
- name: Install Vault CLI
run: |
wget -q https://releases.hashicorp.com/vault/1.15.0/vault_1.15.0_linux_amd64.zip
unzip vault_1.15.0_linux_amd64.zip
sudo mv vault /usr/local/bin/
vault --version
- name: Get Vault Token
id: vault-auth
run: |
TOKEN=$(curl -s -X POST \
"${{ secrets.VAULT_ADDR }}/v1/auth/jwt/login" \
-H "Content-Type: application/json" \
-d "{
\"role\": \"stellar-github\",
\"jwt\": \"${{ secrets.GITHUB_TOKEN }}\"
}" | jq -r '.auth.client_token')
echo "::add-mask::$TOKEN"
echo "VAULT_TOKEN=$TOKEN" >> $GITHUB_ENV
- name: Verify Vault Access
run: |
vault status -address="${{ secrets.VAULT_ADDR }}"
env:
VAULT_ADDR: ${{ secrets.VAULT_ADDR }}
VAULT_TOKEN: ${{ env.VAULT_TOKEN }}
- name: Audit Vault Access
run: |
echo "Vault integration test completed successfully"
echo "Token role: stellar-github"
echo "Authenticated via: GitHub OIDC JWT"