Merge pull request #267 from tv2/SOF-1926/updateRanksOnAdLibActionsAn… #1890
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Node CI | |
on: | |
push: | |
branches: | |
- "**" | |
tags: | |
- "v**" | |
pull_request: | |
workflow_dispatch: | |
env: | |
# set only if you want to override the @sofie-automation scope | |
PACKAGE_SCOPE_OVERRIDE: "@tv2media" | |
jobs: | |
lint-core: | |
name: Typecheck and Lint Core | |
runs-on: ubuntu-latest | |
continue-on-error: true | |
timeout-minutes: 15 | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Use Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version-file: ".node-version" | |
- uses: ./.github/actions/setup-meteor | |
- name: restore node_modules | |
uses: actions/cache@v2 | |
with: | |
path: | | |
meteor/node_modules | |
key: ${{ runner.os }}-${{ hashFiles('meteor/yarn.lock') }}-${{ hashFiles('meteor/.meteor/release') }} | |
- name: Prepare Environment | |
run: | | |
yarn | |
yarn build:packages | |
env: | |
CI: true | |
- name: Run typecheck and linter | |
run: | | |
cd meteor | |
meteor npm run ci:lint | |
env: | |
CI: true | |
test-core: | |
name: Test Core | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Use Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version-file: ".node-version" | |
- uses: ./.github/actions/setup-meteor | |
- name: restore node_modules | |
uses: actions/cache@v2 | |
with: | |
path: | | |
meteor/node_modules | |
key: ${{ runner.os }}-${{ hashFiles('meteor/yarn.lock') }}-${{ hashFiles('meteor/.meteor/release') }} | |
- name: Prepare Environment | |
run: | | |
yarn | |
yarn build:packages | |
env: | |
CI: true | |
- name: Run Tests | |
run: | | |
cd meteor | |
meteor yarn unitci | |
env: | |
CI: true | |
- name: Send coverage | |
uses: codecov/codecov-action@v2 | |
with: | |
fail_ci_if_error: false | |
# name: codecov-umbrella | |
build-core: | |
# TODO - should this be dependant on tests or something passing if we are on a tag? | |
name: Build Core and publish docker image | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Get the Docker tag | |
id: docker-tag | |
uses: yuya-takeyama/docker-tag-from-github-ref-action@2b0614b1338c8f19dd9d3ea433ca9bc0cc7057ba | |
with: | |
remove-version-tag-prefix: false | |
- name: Determine images to publish | |
id: image-tags | |
run: | | |
IMAGES= | |
DOCKER_TAG=${{ steps.docker-tag.outputs.tag }} | |
# check if a release branch, or master, or a tag | |
if [[ $DOCKER_TAG =~ ^release([0-9]+)$ || $DOCKER_TAG == "latest" || "${{ github.ref }}" == refs/tags/* ]] | |
then | |
# If we have a dockerhub image name, then setup to publish there | |
if [ -z "${{ secrets.DOCKERHUB_IMAGE_PREFIX }}" ] | |
then | |
DOCKERHUB_PUBLISH="0" | |
else | |
DOCKERHUB_PUBLISH="1" | |
IMAGES="${{ secrets.DOCKERHUB_IMAGE_PREFIX }}server-core:$DOCKER_TAG"$'\n'$IMAGES | |
fi | |
# debug output | |
echo dockerhub-publish $DOCKERHUB_PUBLISH | |
echo images $IMAGES | |
echo ::set-output name=images::"$IMAGES" | |
echo ::set-output name=dockerhub-publish::"$DOCKERHUB_PUBLISH" | |
else | |
echo "Skipping docker build" | |
fi | |
- name: Use Node.js | |
uses: actions/setup-node@v2 | |
if: ${{ steps.image-tags.outputs.images }} | |
with: | |
node-version-file: ".node-version" | |
- uses: ./.github/actions/setup-meteor | |
if: ${{ steps.image-tags.outputs.images }} | |
- name: Prepare Environment | |
if: ${{ steps.image-tags.outputs.images }} | |
run: | | |
yarn install | |
- name: Build libs | |
if: ${{ steps.image-tags.outputs.images }} | |
run: | | |
yarn build:packages | |
- name: Persist Built Version information | |
if: ${{ steps.image-tags.outputs.images }} | |
run: | | |
cd meteor | |
yarn inject-git-hash | |
- name: Meteor Build | |
if: ${{ steps.image-tags.outputs.images }} | |
run: | | |
cd meteor | |
NODE_OPTIONS="--max-old-space-size=4096" METEOR_DEBUG_BUILD=1 meteor build --allow-superuser --directory . | |
- name: Meteor Bundle NPM Build | |
if: ${{ steps.image-tags.outputs.images }} | |
run: | | |
cd meteor/bundle/programs/server | |
meteor npm install | |
- name: Set up Docker Buildx | |
if: ${{ steps.image-tags.outputs.images }} | |
uses: docker/setup-buildx-action@v1 | |
- name: Login to DockerHub | |
if: steps.image-tags.outputs.images && steps.image-tags.outputs.dockerhub-publish == '1' | |
uses: docker/login-action@v1 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
# TODO - do we want this? | |
# - name: Login to GitHub Container Registry | |
# uses: docker/login-action@v1 | |
# with: | |
# registry: ghcr.io | |
# username: ${{ github.repository_owner }} | |
# password: ${{ secrets.CR_PAT }} | |
- name: Build and push | |
uses: docker/build-push-action@v2 | |
if: ${{ steps.image-tags.outputs.images }} | |
with: | |
context: . | |
file: ./meteor/Dockerfile.circle | |
push: true | |
tags: ${{ steps.image-tags.outputs.images }} | |
build-gateways: | |
# TODO - should this be dependant on tests or something passing if we are on a tag? | |
name: Build gateways | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
strategy: | |
fail-fast: false | |
matrix: | |
gateway-name: [playout-gateway, mos-gateway] | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Get the Docker tag | |
id: docker-tag | |
uses: yuya-takeyama/docker-tag-from-github-ref-action@2b0614b1338c8f19dd9d3ea433ca9bc0cc7057ba | |
with: | |
remove-version-tag-prefix: false | |
- name: Determine images to publish | |
id: image-tags | |
# TODO - image needs changing... | |
run: | | |
IMAGES= | |
DOCKER_TAG=${{ steps.docker-tag.outputs.tag }} | |
# check if a release branch, or master, or a tag | |
if [[ $DOCKER_TAG =~ ^release([0-9]+)$ || $DOCKER_TAG == "latest" || "${{ github.ref }}" == refs/tags/* ]] | |
then | |
# If we have a dockerhub image name, then setup to publish there | |
if [ -z "${{ secrets.DOCKERHUB_IMAGE_PREFIX }}" ] | |
then | |
DOCKERHUB_PUBLISH="0" | |
else | |
DOCKERHUB_PUBLISH="1" | |
IMAGES="${{ secrets.DOCKERHUB_IMAGE_PREFIX }}${{ matrix.gateway-name }}:$DOCKER_TAG"$'\n'$IMAGES | |
fi | |
# debug output | |
echo dockerhub-publish $DOCKERHUB_PUBLISH | |
echo images $IMAGES | |
echo ::set-output name=images::"$IMAGES" | |
echo ::set-output name=dockerhub-publish::"$DOCKERHUB_PUBLISH" | |
else | |
echo "Skipping docker build" | |
fi | |
- name: Use Node.js | |
uses: actions/setup-node@v2 | |
if: ${{ steps.image-tags.outputs.images }} | |
with: | |
node-version-file: ".node-version" | |
- name: Build | |
if: ${{ steps.image-tags.outputs.images }} | |
run: | | |
cd packages | |
yarn install | |
yarn lerna run --scope \*\*/${{ matrix.gateway-name }} --include-dependencies --stream build | |
yarn install --prod --ignore-scripts | |
- name: Set up Docker Buildx | |
if: ${{ steps.image-tags.outputs.images }} | |
uses: docker/setup-buildx-action@v1 | |
- name: Login to DockerHub | |
if: steps.image-tags.outputs.images && steps.image-tags.outputs.dockerhub-publish == '1' | |
uses: docker/login-action@v1 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
# TODO - do we want this? | |
# - name: Login to GitHub Container Registry | |
# uses: docker/login-action@v1 | |
# with: | |
# registry: ghcr.io | |
# username: ${{ github.repository_owner }} | |
# password: ${{ secrets.CR_PAT }} | |
- name: Build and push | |
uses: docker/build-push-action@v2 | |
if: ${{ steps.image-tags.outputs.images }} | |
with: | |
context: ./packages | |
file: ./packages/${{ matrix.gateway-name }}/Dockerfile.circle | |
push: true | |
tags: ${{ steps.image-tags.outputs.images }} | |
lint-packages: | |
name: Lint Package | |
runs-on: ubuntu-latest | |
continue-on-error: true | |
timeout-minutes: 15 | |
strategy: | |
fail-fast: false | |
matrix: | |
package-name: | |
- blueprints-integration | |
- server-core-integration | |
- playout-gateway | |
- mos-gateway | |
- corelib | |
- shared-lib | |
- job-worker | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Use Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version-file: ".node-version" | |
- name: Prepare Environment | |
run: | | |
cd packages | |
yarn install | |
yarn lerna run --scope \*\*/${{ matrix.package-name }} --include-dependencies --stream build | |
env: | |
CI: true | |
- name: Run typecheck and linter | |
run: | | |
cd packages/${{ matrix.package-name }} | |
yarn lint | |
env: | |
CI: true | |
test-packages: | |
name: Test Package | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
strategy: | |
fail-fast: false | |
matrix: | |
package-name: | |
- blueprints-integration | |
- server-core-integration | |
- shared-lib | |
node-version: [14.x, 16.x] | |
include: | |
# include additional configs, to run certain packages only for a certain version of node | |
- node-version: 14.x | |
package-name: corelib | |
send-coverage: true | |
- node-version: 14.x | |
package-name: job-worker | |
send-coverage: true | |
# No tests for the gateways yet | |
# - node-version: 12.x | |
# package-name: playout-gateway | |
# - node-version: 12.x | |
# package-name: mos-gateway | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Use Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v2 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Prepare Environment | |
run: | | |
cd packages | |
yarn install | |
yarn lerna run --scope \*\*/${{ matrix.package-name }} --include-dependencies --stream build | |
env: | |
CI: true | |
- name: Run tests | |
run: | | |
cd packages/${{ matrix.package-name }} | |
yarn unit | |
env: | |
CI: true | |
- name: Send coverage | |
if: matrix.node-version == '16.x' || matrix.send-coverage == true | |
uses: codecov/codecov-action@v2 | |
with: | |
fail_ci_if_error: false | |
# name: codecov-umbrella | |
publish-docs: | |
name: Publish Docs | |
runs-on: ubuntu-latest | |
continue-on-error: true | |
timeout-minutes: 15 | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Use Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version-file: ".node-version" | |
- name: Prepare Environment | |
run: | | |
cd packages | |
yarn install | |
yarn build | |
env: | |
CI: true | |
- name: Run docusaurus | |
run: | | |
cd packages/documentation | |
yarn docs:build | |
env: | |
CI: true | |
- name: Run typedoc | |
run: | | |
cd packages | |
yarn docs:typedoc | |
cp docs documentation/build/typedoc -R | |
env: | |
CI: true | |
- name: Publish | |
if: github.ref == 'refs/heads/master' # always publish for just the master branch | |
uses: peaceiris/actions-gh-pages@v3 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: ./packages/documentation/build | |
release-libs: | |
name: Release Lib | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
# only run for tags or manual triggers | |
if: contains(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' | |
needs: | |
- test-packages | |
# core must be published first | |
- build-core | |
strategy: | |
fail-fast: false | |
matrix: | |
package-name: | |
- blueprints-integration | |
- server-core-integration | |
- shared-lib | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Use Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version-file: ".node-version" | |
- name: Prepare Environment # have to run this first to make sure the semver lib is available | |
run: | | |
cd packages | |
yarn install | |
env: | |
CI: true | |
- name: Check release is desired | |
id: do-publish | |
run: | | |
if [ -z "${{ secrets.NPM_TOKEN }}" ]; then | |
echo "No Token" | |
else | |
yarn --ignore-scripts | |
cd packages/${{ matrix.package-name }} | |
PACKAGE_NAME=$(yarn info -s . name) | |
[[ -n "$PACKAGE_SCOPE_OVERRIDE" ]] && PACKAGE_NAME=${PACKAGE_NAME/@sofie-automation/"$PACKAGE_SCOPE_OVERRIDE"} | |
PUBLISHED_VERSION=$(yarn info -s $PACKAGE_NAME version) | |
THIS_VERSION=$(node -p "require('./package.json').version") | |
NPM_TAG=$(node ../../scripts/determine-npm-tag.js $PUBLISHED_VERSION $THIS_VERSION) | |
echo "Publishing $NPM_TAG" | |
echo ::set-output name=tag::"$NPM_TAG" | |
fi | |
- name: Build | |
if: ${{ steps.do-publish.outputs.tag }} | |
run: | | |
cd packages | |
yarn lerna run --scope \*\*/${{ matrix.package-name }} --include-dependencies --stream build | |
env: | |
CI: true | |
- name: Modify dependencies to use npm packages | |
run: node scripts/prepublish.js $PACKAGE_SCOPE_OVERRIDE | |
- name: Publish to NPM | |
if: ${{ steps.do-publish.outputs.tag }} | |
run: | | |
echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> ~/.npmrc | |
cd packages/${{ matrix.package-name }} | |
NEW_VERSION=$(node -p "require('./package.json').version") | |
yarn publish --access=public --new-version=$NEW_VERSION --network-timeout 100000 --tag ${{ steps.do-publish.outputs.tag }} | |
env: | |
CI: true | |
check-for-multiple-library-versions: | |
name: Check for multiple library versions | |
runs-on: ubuntu-latest | |
continue-on-error: true | |
timeout-minutes: 15 | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Use Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version-file: ".node-version" | |
- uses: ./.github/actions/setup-meteor | |
- name: restore node_modules | |
uses: actions/cache@v2 | |
with: | |
path: | | |
meteor/node_modules | |
key: ${{ runner.os }}-${{ hashFiles('meteor/yarn.lock') }}-${{ hashFiles('meteor/.meteor/release') }} | |
- name: Prepare Environment | |
run: | | |
yarn | |
env: | |
CI: true | |
- name: Run check | |
run: | | |
node scripts/checkForMultipleVersions.mjs | |
env: | |
CI: true |