name: Main on: push: branches: - master - "push-action/**" pull_request: concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: main-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node and pnpm uses: silverhand-io/actions-node-pnpm-run-steps@v4 - name: Build run: pnpm ci:build main-lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node and pnpm uses: silverhand-io/actions-node-pnpm-run-steps@v4 - name: Prepack run: pnpm prepack - name: Lint run: pnpm ci:lint - name: Stylelint run: pnpm ci:stylelint main-test: runs-on: buildjet-4vcpu-ubuntu-2204 steps: - uses: actions/checkout@v4 - name: Setup Node and pnpm uses: silverhand-io/actions-node-pnpm-run-steps@v4 - name: Build for test run: pnpm -r build:test - name: Test run: pnpm ci:test - name: Codecov core uses: codecov/codecov-action@v3 with: flags: core directory: ./packages/core - name: Codecov ui uses: codecov/codecov-action@v3 with: flags: ui directory: ./packages/ui main-dockerize: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build uses: docker/build-push-action@v5 with: context: . build-args: | # Test cloud build additional_connector_args=--cloud main-alteration: runs-on: ubuntu-latest steps: # ** Checkout fresh and alteration ref ** - uses: actions/checkout@v4 with: fetch-depth: 0 path: ./fresh # Fetch the current version by finding the latest tag starts with "v", e.g. "v1.0.0-beta.19" - id: version working-directory: ./fresh run: echo "current=$(git describe --match "@logto/core@*" --abbrev=0)" >> $GITHUB_OUTPUT - uses: actions/checkout@v4 with: ref: ${{ steps.version.outputs.current }} path: ./alteration # ** End ** - name: Copy lockfile # Make setup workflow happy run: cp ./fresh/pnpm-lock.yaml ./ - name: Setup Node and pnpm uses: silverhand-io/actions-node-pnpm-run-steps@v4 with: run-install: false # ** Prepack packages ** - name: Prepack fresh working-directory: ./fresh run: pnpm i && pnpm prepack - name: Prepack alteration working-directory: ./alteration run: pnpm i && pnpm prepack # ** End ** - name: Setup Postgres uses: ikalnytskyi/action-setup-postgres@v5 # ** Setup up-to-date databases and compare (test `up`) ** - name: Setup fresh database working-directory: ./fresh run: pnpm cli db seed --test env: DB_URL: postgres://postgres:postgres@localhost:5432/fresh - name: Setup alteration database working-directory: ./alteration run: | cd packages/cli pnpm start db seed env: DB_URL: postgres://postgres:postgres@localhost:5432/alteration # FIXME: Last version of CLI doesn't support test data seeding. Here's a temporary workaround. # We will remove this step when a new version of CLI is released. - name: Setup alteration database test data working-directory: ./fresh run: pnpm cli db seed --legacy-test-data env: DB_URL: postgres://postgres:postgres@localhost:5432/alteration - name: Run alteration scripts working-directory: ./fresh run: pnpm cli db alt deploy next env: ALTERATION_TEST: true DB_URL: postgres://postgres:postgres@localhost:5432/alteration - name: Compare databases working-directory: ./fresh run: node .scripts/compare-database.js fresh alteration # ** End ** # ** Setup old databases and compare (test `down`) ** - name: Setup old database working-directory: ./alteration run: | cd packages/cli pnpm start db seed env: DB_URL: postgres://postgres:postgres@localhost:5432/old # FIXME: Last version of CLI doesn't support test data seeding. Here's a temporary workaround. # We will remove this step when a new version of CLI is released. - name: Setup old database test data working-directory: ./fresh run: pnpm cli db seed --legacy-test-data env: DB_URL: postgres://postgres:postgres@localhost:5432/old - name: Revert fresh database to old working-directory: ./fresh run: pnpm cli db alt r v$(echo ${{ steps.version.outputs.current }} | cut -d@ -f3) env: ALTERATION_TEST: true DB_URL: postgres://postgres:postgres@localhost:5432/fresh - name: Compare manifests working-directory: ./fresh run: node .scripts/compare-database.js fresh old # ** End ** - name: Check alteration sequence working-directory: ./fresh run: node .scripts/check-alterations-sequence.js