diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml index d6756fd..5e92fbd 100644 --- a/.github/workflows/ci-cd.yaml +++ b/.github/workflows/ci-cd.yaml @@ -1,71 +1,25 @@ name: CI-CD +#on: +# push: +# branches: +# - "main" +# - "releases/**" +# tags: +# - v[0-9]+.[0-9]+.[0-9]+ +# pull_request: ~ + on: push: branches: - - "main" - - "releases/**" - tags: - - v[0-9]+.[0-9]+.[0-9]+ - pull_request: ~ - -env: - DOCKER_BUILDKIT: 1 + - e2e jobs: - tests: - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [ 20.x ] - name: Run tests on Node ${{ matrix.node-version }} - steps: - - uses: actions/checkout@v4 - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - cache: 'yarn' - - run: yarn install --frozen-lockfile - - run: yarn test:ci - - images: - runs-on: ubuntu-latest - if: github.event_name == 'push' && github.repository == 'aulasoftwarelibre/codex' && (startsWith(github.ref, 'refs/heads/releases/') || startsWith(github.ref, 'refs/tags/v') ) - needs: tests - steps: - - uses: actions/checkout@v4 - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Cache Docker layers - uses: actions/cache@v3 - with: - path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-buildx- - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Extract tag name - id: extract_tag - run: echo "TAG=$(echo ${GITHUB_REF##*/})" >> $GITHUB_OUTPUT - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: . - push: true - tags: | - ghcr.io/aulasoftwarelibre/codex:latest - ghcr.io/aulasoftwarelibre/codex:${{ steps.extract_tag.outputs.TAG }} - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max - - name: Move cache - run: | - rm -rf /tmp/.buildx-cache - mv /tmp/.buildx-cache-new /tmp/.buildx-cache + call-tests: + uses: ./.github/workflows/tests.yaml + call-e2e: + needs: call-tests + uses: ./.github/workflows/e2e.yaml + call-image: + needs: call-e2e + uses: ./.github/workflows/image.yaml diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index edcd7ae..bb276da 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -1,18 +1,16 @@ -name: e2e +name: Run e2e tests on: - push: - branches: - - "e2e" + workflow_call: env: - DOCKER_BUILDKIT: 1 MAILER_SECRET: E2E AUTH_SECRET: E2E jobs: e2e: runs-on: ubuntu-latest + if: github.event_name == 'push' && github.repository == 'aulasoftwarelibre/codex' && (startsWith(github.ref, 'refs/heads/releases/') || startsWith(github.ref, 'refs/tags/v') ) services: smtp: image: "corpusops/mailhog:v1.0.1" @@ -34,20 +32,25 @@ jobs: strategy: matrix: node-version: [ 20.x ] - name: Run tests on Node ${{ matrix.node-version }} + name: Run e2e tests on Node ${{ matrix.node-version }} steps: - - uses: actions/checkout@v4 + - name: Checkout repository + uses: actions/checkout@v4 - name: Setup node uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: 'yarn' - - run: yarn install --frozen-lockfile - - run: yarn prisma:migrate - - run: yarn test:e2e - - uses: actions/upload-artifact@v3 + - name: Install dependencies + run: yarn install --frozen-lockfile + - name: Run database migrations + run: yarn prisma:migrate + - name: Run e2e tests + run: yarn test:e2e + - name: Upload test report + uses: actions/upload-artifact@v4 if: always() with: name: playwright-report path: playwright-report/ - retention-days: 30 \ No newline at end of file + retention-days: 30 diff --git a/.github/workflows/image.yaml b/.github/workflows/image.yaml new file mode 100644 index 0000000..4d911c9 --- /dev/null +++ b/.github/workflows/image.yaml @@ -0,0 +1,49 @@ +name: Build docker image + +on: + workflow_call: + + +env: + DOCKER_BUILDKIT: 1 + +jobs: + images: + runs-on: ubuntu-latest + if: github.event_name == 'push' && github.repository == 'aulasoftwarelibre/codex' && (startsWith(github.ref, 'refs/heads/releases/') || startsWith(github.ref, 'refs/tags/v') ) + steps: + - uses: actions/checkout@v4 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Cache Docker layers + uses: actions/cache@v3 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract tag name + id: extract_tag + run: echo "TAG=$(echo ${GITHUB_REF##*/})" >> $GITHUB_OUTPUT + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: | + ghcr.io/aulasoftwarelibre/codex:latest + ghcr.io/aulasoftwarelibre/codex:${{ steps.extract_tag.outputs.TAG }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max + - name: Move cache + run: | + rm -rf /tmp/.buildx-cache + mv /tmp/.buildx-cache-new /tmp/.buildx-cache diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml new file mode 100644 index 0000000..31f2bda --- /dev/null +++ b/.github/workflows/tests.yaml @@ -0,0 +1,24 @@ +name: Run unit and integration tests + +on: + workflow_call: + +jobs: + tests: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [ 20.x ] + name: Run tests on Node ${{ matrix.node-version }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'yarn' + - name: Install dependencies + run: yarn install --frozen-lockfile + - name: Run tests + run: yarn test:ci