Skip to content

Merge staging into develop #1892

Merge staging into develop

Merge staging into develop #1892

Workflow file for this run

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