name: "Tests" concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: IMAGE: appwrite-dev on: [pull_request] jobs: setup: name: Setup & Build Appwrite Image runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. fetch-depth: 2 # Fetch submodules submodules: recursive # If this run was triggered by a pull request event, then checkout # the head of the pull request instead of the merge commit. - run: git checkout HEAD^2 if: ${{ github.event_name == 'pull_request' }} # This is a separate action that sets up buildx runner - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Build Appwrite uses: docker/build-push-action@v3 with: context: . push: false tags: ${{ env.IMAGE }} load: true cache-from: type=gha cache-to: type=gha,mode=max outputs: type=docker,dest=/tmp/${{ env.IMAGE }}.tar build-args: | DEBUG=false TESTING=true VERSION=dev # - name: Pull Docker Images # run: docker compose pull --ignore-pull-failures --ignore-buildable # - name: List Files and images # run: | # docker compose config --images | sort -u # docker save $(docker compose config --images | sort -u) -o /tmp/allinone.tar - name: Cache Docker Image uses: actions/cache@v3 with: key: ${{ env.IMAGE }}-${{ github.sha }} path: /tmp/${{ env.IMAGE }}.tar # - name: Upload Docker Image # uses: actions/upload-artifact@v3 # with: # name: ${{ env.IMAGE }} # path: /tmp/${{ env.IMAGE }}.tar unit_test: name: Unit Test runs-on: ubuntu-latest needs: setup steps: - name: checkout uses: actions/checkout@v2 with: fetch-depth: 1 submodules: recursive - name: Load Cache uses: actions/cache@v3 with: key: ${{ env.IMAGE }}-${{ github.sha }} path: /tmp/${{ env.IMAGE }}.tar fail-on-cache-miss: true - name: Load and Start Appwrite run: | docker load --input /tmp/${{ env.IMAGE }}.tar docker compose up -d sleep 10 - name: Doctor run: docker compose exec -T appwrite doctor - name: Environment Variables run: docker compose exec -T appwrite vars - name: Run Unit Tests run: docker compose exec appwrite test /usr/src/code/tests/unit e2e_test: name: E2E Test runs-on: ubuntu-latest needs: setup strategy: fail-fast: false matrix: services: [Account,Avatars,Console,Databases,Functions,GraphQL,Health,Locale,Projects,Realtime,Storage,Teams,Users,Webhooks] steps: - name: checkout uses: actions/checkout@v2 with: fetch-depth: 2 submodules: recursive - name: Load Cache uses: actions/cache@v3 with: key: ${{ env.IMAGE }}-${{ github.sha }} path: /tmp/${{ env.IMAGE }}.tar fail-on-cache-miss: true - name: Load and Start Appwrite run: | docker load --input /tmp/${{ env.IMAGE }}.tar docker compose up -d sleep 20 - name: Additional Sleep for Functions and GraphQL if: ${{ matrix.services == 'Functions' || matrix.services == 'GraphQL' }} run: sleep 30 - name: Run ${{matrix.services}} Tests run: docker compose exec -T appwrite test /usr/src/code/tests/e2e/Services/${{matrix.services}} --debug