diff --git a/.github/actions/cache-bootstrap/action.yml b/.github/actions/cache-bootstrap/action.yml new file mode 100644 index 0000000000..d0c07a7719 --- /dev/null +++ b/.github/actions/cache-bootstrap/action.yml @@ -0,0 +1,31 @@ +name: cache-bootstrap +description: Creates a cache with the given extension for lerna packages +inputs: + extension: + description: Extension for cache name + partial: + description: Boolean flag to describe whether or not to run a partial bootstrap when finding cache + default: false +runs: + using: composite + steps: + # for always overriding cache, use: pat-s/always-upload-cache@v2.1.5 + - uses: actions/cache@v2 + id: cache + with: + path: | + node_modules + */*/node_modules + key: ${{ runner.os }}-yarn-${{inputs.extension}}-v5-${{ hashFiles('**/yarn.lock') }} + # We want to only bootstrap and install if no cache is found. + # Futhermore, we might want to do a partial, hoisted, bootstrap towards + # the base branch if it exists, otherwise we choose develop for this. + - run: | + if [[ "${{steps.cache.outputs.cache-hit}}" != "true" ]]; then + yarn install --frozen-lockfile + yarn bootstrap --concurrency=2 + elif [[ "${{inputs.partial}}" = "true" ]]; then + [[ ! -z "${GITHUB_BASE_REF}" ]] && ref="${GITHUB_BASE_REF#refs/heads/}" || ref="develop" + yarn bootstrap --npm-client=npm --hoist --since "origin/${ref}...HEAD" --concurrency=2 + fi + shell: bash diff --git a/.github/workflows/action.yml b/.github/workflows/action.yml new file mode 100644 index 0000000000..1149fae5f5 --- /dev/null +++ b/.github/workflows/action.yml @@ -0,0 +1,83 @@ +name: Medusa Pipeline +on: [push, pull_request] + +jobs: + unit-tests: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2.3.5 + with: + fetch-depth: 0 + + - name: Setup Node.js environment + uses: actions/setup-node@v2.4.1 + with: + node-version: "14" + cache: "yarn" + + - name: Assert changed + run: ./scripts/assert-changed-files.sh "packages" + + - name: Bootstrap packages + uses: ./.github/actions/cache-bootstrap + with: + extension: unit-tests + partial: true + + - name: Run unit tests + run: node --max-old-space-size=2048 ./node_modules/.bin/jest -w 1 + + integration-tests: + runs-on: ubuntu-latest + + services: + postgres: + image: postgres + env: + POSTGRES_PASSWORD: postgres + POSTGRES_USER: postgres + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 + + steps: + - name: Checkout + uses: actions/checkout@v2.3.5 + with: + fetch-depth: 0 + + - name: Setup Node.js environment + uses: actions/setup-node@v2.4.1 + with: + node-version: "14" + cache: "yarn" + + - name: Bootstrap packages + uses: ./.github/actions/cache-bootstrap + with: + extension: integration-tests + + - name: Install dev cli + run: sudo npm i -g medusa-dev-cli + + - name: Set path to medusa repo + run: medusa-dev --set-path-to-repo `pwd` + + - name: Force install + run: medusa-dev --force-install + working-directory: integration-tests/api + + - name: Build integration tests + run: yarn build + working-directory: integration-tests/api + + - name: Run integration tests + run: yarn test + working-directory: integration-tests/api + env: + DB_PASSWORD: postgres