Saltar al contenido
Olimpia
Esc
↑↓navegar↵abrir⌘Jvista previa
En esta página

Deploy desde tu propio CI

Corré tus tests en GitHub Actions, GitLab CI o cualquier pipeline y desplegá en Olimpia solo cuando pasan.

El deploy automático con GitHub despliega cada push sin pasos extra. Si preferís que tu pipeline decida cuándo desplegar (por ejemplo, después de correr los tests), usá una app con código subido y llamá a la API desde tu CI.

Qué necesitás

  1. Una app creada con source: "upload". Ver Subir tu carpeta.
  2. Un token personal, guardado como secreto del CI (OLIMPIA_TOKEN).
  3. El id de la app, como variable del CI (OLIMPIA_APP_ID).

GitHub Actions

name: Deploy a Olimpia

on:
  push:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test

  deploy:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Subir y desplegar
        env:
          OLIMPIA_TOKEN: ${{ secrets.OLIMPIA_TOKEN }}
          APP_ID: ${{ vars.OLIMPIA_APP_ID }}
        run: |
          api=https://api.olimpia.dev
          auth="Authorization: Bearer $OLIMPIA_TOKEN"
          upload=$(curl -fsS -X POST -H "$auth" "$api/apps/$APP_ID/source")
          git archive --format=tar.gz --prefix=src/ -o /tmp/src.tar.gz HEAD
          curl -fsS -X PUT -T /tmp/src.tar.gz "$(echo "$upload" | jq -r .upload_url)"
          curl -fsS -X POST -H "$auth" -H 'content-type: application/json' \
            -d "{\"source\": \"$(echo "$upload" | jq -r .key)\", \"message\": \"$GITHUB_SHA\"}" \
            "$api/apps/$APP_ID/deployments" > /dev/null

GitLab CI

deploy:
  stage: deploy
  image: alpine:3.22
  only: [main]
  script:
    - apk add --no-cache curl jq git
    - api=https://api.olimpia.dev
    - auth="Authorization: Bearer $OLIMPIA_TOKEN"
    - upload=$(curl -fsS -X POST -H "$auth" "$api/apps/$OLIMPIA_APP_ID/source")
    - git archive --format=tar.gz --prefix=src/ -o /tmp/src.tar.gz HEAD
    - curl -fsS -X PUT -T /tmp/src.tar.gz "$(echo "$upload" | jq -r .upload_url)"
    - >
      curl -fsS -X POST -H "$auth" -H 'content-type: application/json'
      -d "{\"source\": \"$(echo "$upload" | jq -r .key)\", \"message\": \"$CI_COMMIT_SHA\"}"
      "$api/apps/$OLIMPIA_APP_ID/deployments"

Esperar el resultado

El POST de deployments responde enseguida. Para que el pipeline falle si el deploy falla, consultá el último deploy hasta que termine:

until status=$(curl -fsS -H "$auth" "$api/apps/$APP_ID/deployments" | jq -r '.[0].status'); \
  [ "$status" = active ] || [ "$status" = failed ] || [ "$status" = canceled ]; do sleep 10; done
[ "$status" = active ]

¿Te ha resultado útil esta página?