From fd18c24d0b83762b904a36e7af45b1bded53f8b4 Mon Sep 17 00:00:00 2001 From: Alexis Georges Date: Fri, 7 May 2021 00:03:29 +0200 Subject: [PATCH] ci(build-main): separate packages and showcase+starter build in GitHub Actions --- .github/workflows/build.yml | 170 ++++++++++++++++++++++++++++++------ package.json | 4 + 2 files changed, 149 insertions(+), 25 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f29f29b538..104aba176a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -105,18 +105,40 @@ jobs: if: github.actor == 'dependabot[bot]' - name: Install dependencies - run: | - npm ci - npm run install:ci:all + run: npm ci + + - name: Build + run: npm run build:trace - name: Linting - run: npm run lint:all + run: npm run lint:packages - name: Testing - run: npm run test:ci:all - - - name: "Build showcase:ghpages" - run: npm run build:showcase:ghpages + run: npm run test:ci:packages + + # See: https://github.com/marketplace/actions/upload-artifact + - name: Upload starter package.json file + uses: actions/upload-artifact@v2 + with: + name: "starter-package-json" + path: "starter/package.json" + if: env.IS_MAIN_ENVIRONMENT == 1 + + # See: https://github.com/marketplace/actions/upload-artifact + - name: Upload showcase package.json file + uses: actions/upload-artifact@v2 + with: + name: "showcase-package-json" + path: "showcase/package.json" + if: env.IS_MAIN_ENVIRONMENT == 1 + + # See: https://github.com/marketplace/actions/upload-artifact + - name: Upload showcase package-lock.json file + uses: actions/upload-artifact@v2 + with: + name: "showcase-package-lock-json" + path: "showcase/package-lock.json" + if: env.IS_MAIN_ENVIRONMENT == 1 # See: https://github.com/marketplace/actions/upload-artifact - name: Upload stark packages-dist folder @@ -126,6 +148,115 @@ jobs: path: dist/packages-dist if: env.IS_MAIN_ENVIRONMENT == 1 + - name: Generate docs coverage + run: npm run docs:coverage:packages + if: env.IS_MAIN_ENVIRONMENT == 1 + + - name: Save logs + run: bash ./scripts/ci/print-logs.sh + + - name: Combine coveralls reports + run: node combine-packages-coverage.js + if: env.IS_MAIN_ENVIRONMENT == 1 + + - name: Coveralls + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + path-to-lcov: "combined-lcov.info" + if: env.IS_MAIN_ENVIRONMENT == 1 + + build-and-test-showcase-and-starter: + name: Build and test showcase and starter on Node.js ${{ matrix.node_version }} and ${{ matrix.os }} + needs: build-and-test + runs-on: ${{ matrix.os }} + strategy: + matrix: + node_version: [ "10", "12" ] + os: [ ubuntu-latest, macOS-latest ] + + steps: + # Some actions should be executed only in one environment. + # This variable determines if it is the main environment, it means the same than the one we have internally. + - name: Set environment variable 'IS_MAIN_ENVIRONMENT' + run: | + if [[ '${{ matrix.node_version }}' == '${{ env.MAIN_NODEJS }}' ]] && [[ '${{ matrix.os }}' == 'ubuntu-latest' ]]; then + echo "IS_MAIN_ENVIRONMENT=1" >> $GITHUB_ENV + else + echo "IS_MAIN_ENVIRONMENT=0" >> $GITHUB_ENV + fi + + # See: https://github.com/marketplace/actions/checkout + - uses: actions/checkout@v2 + + # See: https://github.com/marketplace/actions/setup-node-js-environment + - name: Use Node.js ${{ matrix.node_version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node_version }} + + - name: Create file & folder for GitHub Actions logs + run: | + # cfr scripts/_ghactions-group.sh + mkdir -p ${{ env.LOGS_DIR }} + touch ${{ env.LOGS_FILE }} + + - uses: actions/download-artifact@v2 + with: + name: "starter-package-json" + path: "starter/package.json" + + - uses: actions/download-artifact@v2 + with: + name: "showcase-package-json" + path: "showcase/package.json" + + - uses: actions/download-artifact@v2 + with: + name: "showcase-package-lock-json" + path: "showcase/package-lock.json" + + - uses: actions/download-artifact@v2 + with: + name: stark-dist + path: dist/packages-dist + + # See: https://github.com/marketplace/actions/cache + # See doc: https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows + - name: Cache node modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules-${{ matrix.node_version }}-${{ matrix.os }} + with: + # npm cache files are stored in `~/.npm` on Linux/macOS + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + + - name: Install npm ${{ env.NPM_VERSION }} + run: npm i -g npm@${{ env.NPM_VERSION }} + + - name: Install dependencies + run: | + npm run install:ci:showcase + npm run install:starter + + - name: Linting + run: | + npm run lint:showcase + npm run lint:starter + + - name: Testing + run: | + npm run test:ci:showcase + npm run test:ci:starter + + - name: "Build showcase:ghpages" + run: npm run build:showcase:ghpages + # See: https://github.com/marketplace/actions/upload-artifact - name: Upload showcase dist folder uses: actions/upload-artifact@v2 @@ -133,7 +264,7 @@ jobs: name: showcase-dist path: showcase/dist if: env.IS_MAIN_ENVIRONMENT == 1 - + - name: BrowserStack Env Setup uses: browserstack/github-actions/setup-env@master with: @@ -149,17 +280,17 @@ jobs: local-logging-level: "all-logs" local-identifier: "github-actions-${{ github.run_number }}" if: env.IS_MAIN_ENVIRONMENT == 1 && github.event_name == 'push' - + - name: Running application under test run: npm run server:prod:ci & if: env.IS_MAIN_ENVIRONMENT == 1 && github.event_name == 'push' working-directory: showcase - + - name: Running test on BrowserStack run: npm run protractor:browserstack if: env.IS_MAIN_ENVIRONMENT == 1 && github.event_name == 'push' working-directory: showcase - + - name: BrowserStackLocal Stop uses: browserstack/github-actions/setup-local@master with: @@ -167,27 +298,16 @@ jobs: if: env.IS_MAIN_ENVIRONMENT == 1 && github.event_name == 'push' - name: Generate docs coverage - run: npm run docs:coverage + run: npm run docs:coverage:starter if: env.IS_MAIN_ENVIRONMENT == 1 - name: Save logs run: bash ./scripts/ci/print-logs.sh - - - name: Combine coveralls reports - run: node combine-packages-coverage.js - if: env.IS_MAIN_ENVIRONMENT == 1 - - - name: Coveralls - uses: coverallsapp/github-action@master - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - path-to-lcov: "combined-lcov.info" - if: env.IS_MAIN_ENVIRONMENT == 1 release: name: Release runs-on: "ubuntu-latest" - needs: build-and-test + needs: build-and-test-showcase-and-starter if: (startsWith(github.ref, 'refs/tags/') || github.event_name == 'schedule') && github.repository == 'NationalBankBelgium/stark' steps: - name: Get tag name if exists diff --git a/package.json b/package.json index 9dc83f1490..5e2ca8f7d1 100644 --- a/package.json +++ b/package.json @@ -158,6 +158,7 @@ "docs:all": "npm run docs:stark-core:generate && npm run docs:stark-ui:generate && npm run docs:stark-rbac:generate && npm run docs:starter:generate", "docs:clean": "npx rimraf reports/api-docs", "docs:coverage": "npm run docs:stark-core:coverage && npm run docs:stark-ui:coverage && npm run docs:stark-rbac:coverage && npm run docs:starter:coverage", + "docs:coverage:packages": "npm run docs:stark-core:coverage && npm run docs:stark-ui:coverage && npm run docs:stark-rbac:coverage", "docs:publish": "bash ./gh-deploy.sh --trace", "docs:stark-core:coverage": "cd packages/stark-core && npm run docs:coverage && cd ../..", "docs:stark-core:generate": "cd packages/stark-core && npm run docs && cd ../..", @@ -180,6 +181,7 @@ "lint:showcase": "cd showcase && npm run lint && cd ..", "lint:starter": "cd starter && npm run lint && cd ..", "lint:all": "npm run lint:stark-core && npm run lint:stark-ui && npm run lint:stark-rbac && npm run lint:starter && npm run lint:showcase", + "lint:packages": "npm run lint:stark-core && npm run lint:stark-ui && npm run lint:stark-rbac", "install:all": "npm run build && npm run install:starter && npm run install:showcase", "install:showcase": "cd showcase && npm install && cd ..", "install:starter": "cd starter && ../node_modules/.bin/cross-env HUSKY_SKIP_INSTALL=1 npm install && cd ..", @@ -208,6 +210,7 @@ "stylelint-check": "stylelint-config-prettier-check", "test": "npm run test:ci:all", "test:all": "npm run test:stark-core && npm run test:stark-ui && npm run test:stark-rbac && npm run test:starter && npm run test:showcase", + "test:packages": "npm run test:stark-core && npm run test:stark-ui && npm run test:stark-rbac", "test:stark-core": "ng test stark-core", "test:stark-rbac": "ng test stark-rbac", "test:stark-ui": "ng test stark-ui", @@ -217,6 +220,7 @@ "test:starter": "cd starter && npm run test-fast && cd ../..", "test:starter:e2e": "cd starter && npm run e2e && cd ../..", "test:ci:all": "npm run test:ci:stark-core && npm run test:ci:stark-ui && npm run test:ci:stark-rbac && npm run test:ci:starter && npm run test:ci:showcase", + "test:ci:packages": "npm run test:ci:stark-core && npm run test:ci:stark-ui && npm run test:ci:stark-rbac", "test:ci:stark-core": "cross-env CI=true ng test stark-core --code-coverage", "test:ci:stark-rbac": "cross-env CI=true ng test stark-rbac --code-coverage", "test:ci:stark-ui": "cross-env CI=true ng test stark-ui --code-coverage",