Skip to content

Build OCJS

Build OCJS #4

Workflow file for this run

name: Build OCJS
on:
workflow_dispatch:
inputs:
buildType:
type: choice
description: Type of build
options:
- testBindings
- dryRun
- release
multithreaded:
type: boolean
description: Include Multi-Threaded build?
jobs:
build:
name: Build OpenCascade.js
runs-on: [ubuntu-latest]
timeout-minutes: 10000
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
lfs: true
- name: Generate version number
id: version
run: |
if [ "${{ github.event.inputs.buildType }}" == "release" ]
then
# export NEW_OPENCASCADEJS_VERSION=$(node -p -e "require('./package.json').version.split('-')[0]")-beta.$(git log --pretty=format:'%h' -n 1)
export NEW_OPENCASCADEJS_VERSION=2.0.0
echo "::set-output name=version::$NEW_OPENCASCADEJS_VERSION"
echo "::set-output name=tags::${{ secrets.DOCKER_IMAGE_NAME }}:$NEW_OPENCASCADEJS_VERSION,${{ secrets.DOCKER_IMAGE_NAME }}:latest"
else
echo "::set-output name=tags::${{ secrets.DOCKER_IMAGE_NAME }}:latest"
fi
- name: Get branch name
id: branch-name
uses: tj-actions/[email protected]
- name: Generate Docker Staging Tag Name
id: dockerStagingTag
run: |
githubBranch=${{ steps.branch-name.outputs.current_branch }}
tag=$(echo "$githubBranch" | tr '[:upper:]' '[:lower:]')
echo "::set-output name=tag::$tag"
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- uses: actions/setup-node@v2
with:
node-version: '16'
- name: NPM install tests
run: |
cd test
npm install
cd ..
# - name: Build OpenCascade.js Docker Image "test-image" and run binding tests
# timeout-minutes: 10000
# run: |
# docker pull ${{ secrets.DOCKER_IMAGE_NAME }}:latest || true
# docker pull ${{ secrets.DOCKER_IMAGE_NAME }}:staging-${{ steps.dockerStagingTag.outputs.tag }} || true
# docker build --target test-image --build-arg threading=single-threaded -t ${{ secrets.DOCKER_IMAGE_NAME }}-test-image --cache-from ${{ secrets.DOCKER_IMAGE_NAME }}:staging-${{ steps.dockerStagingTag.outputs.tag }} --cache-from ${{ secrets.DOCKER_IMAGE_NAME }}:latest .
# cd test
# dockerImageName="${{ secrets.DOCKER_IMAGE_NAME }}-test-image" npm run test -- ./testBindings.test.ts
# cd ..
- name: Build OpenCascade.js Docker Image "custom-build-image"
if: github.event.inputs.buildType != 'testBindings'
timeout-minutes: 10000
run: |
docker build --target custom-build-image --build-arg threading=single-threaded -t ${{ secrets.DOCKER_IMAGE_NAME }} --cache-from ${{ secrets.DOCKER_IMAGE_NAME }}:staging-${{ steps.dockerStagingTag.outputs.tag }} --cache-from ${{ secrets.DOCKER_IMAGE_NAME }}:latest .
- name: Push to Docker Hub (staging)
if: github.event.inputs.buildType != 'testBindings'
run: |
docker tag ${{ secrets.DOCKER_IMAGE_NAME }} ${{ secrets.DOCKER_IMAGE_NAME }}:staging-${{ steps.dockerStagingTag.outputs.tag }}
docker push ${{ secrets.DOCKER_IMAGE_NAME }}:staging-${{ steps.dockerStagingTag.outputs.tag }}
- name: Build OpenCascade.js Full Module
if: github.event.inputs.buildType != 'testBindings'
timeout-minutes: 10000
run: |
docker run \
-v $(pwd):/src \
-u $(id -u):$(id -g) \
${{ secrets.DOCKER_IMAGE_NAME }} \
/src/builds/opencascade.full.yml
mv opencascade.full.* dist
- name: Run all tests except multi-threading
if: github.event.inputs.buildType != 'testBindings'
run: |
cd test
dockerImageName="${{ secrets.DOCKER_IMAGE_NAME }}:staging-${{ steps.dockerStagingTag.outputs.tag }}" skipMultiThreaded=true npm run test
- name: Build OpenCascade.js Docker Image (Multi-Threaded)
if: github.event.inputs.buildType != 'testBindings' && github.event.inputs.multithreaded == 'true'
timeout-minutes: 10000
run: |
docker pull ${{ secrets.DOCKER_IMAGE_NAME }}:multi-threaded || true
docker pull ${{ secrets.DOCKER_IMAGE_NAME }}:staging-${{ steps.dockerStagingTag.outputs.tag }}-multi-threaded || true
docker build --target custom-build-image --build-arg threading=multi-threaded -t ${{ secrets.DOCKER_IMAGE_NAME }}:multi-threaded --cache-from ${{ secrets.DOCKER_IMAGE_NAME }}:staging-${{ steps.dockerStagingTag.outputs.tag }}-multi-threaded --cache-from ${{ secrets.DOCKER_IMAGE_NAME }}:multi-threaded .
- name: Push to Docker Hub (Staging, Multi-Threaded)
if: github.event.inputs.buildType != 'testBindings' && github.event.inputs.multithreaded == 'true'
run: |
docker tag ${{ secrets.DOCKER_IMAGE_NAME }}:multi-threaded ${{ secrets.DOCKER_IMAGE_NAME }}:staging-${{ steps.dockerStagingTag.outputs.tag }}-multi-threaded
docker push ${{ secrets.DOCKER_IMAGE_NAME }}:staging-${{ steps.dockerStagingTag.outputs.tag }}-multi-threaded
- name: Run multi-threading tests
if: github.event.inputs.buildType != 'testBindings'
run: |
cd test
dockerImageName="${{ secrets.DOCKER_IMAGE_NAME }}:staging-${{ steps.dockerStagingTag.outputs.tag }}-multi-threaded" npm run test -- ./multi-threaded.test.ts
- uses: actions/upload-artifact@v2
if: always()
with:
name: dist
path: ./dist/
- uses: actions/upload-artifact@v2
if: always()
with:
name: customBuilds
path: |
./test/customBuilds/*.js
./test/customBuilds/*.wasm
./test/customBuilds/*.d.ts
./test/customBuilds/*.yml
- name: Push to Docker Hub
if: github.event.inputs.buildType == 'release'
run: |
docker push ${{ secrets.DOCKER_IMAGE_NAME }}
docker tag ${{ secrets.DOCKER_IMAGE_NAME }} ${{ secrets.DOCKER_IMAGE_NAME }}:${{ steps.version.outputs.version }}
docker push ${{ secrets.DOCKER_IMAGE_NAME }}:${{ steps.version.outputs.version }}
- name: Push to Docker Hub (Multi-Threaded)
if: github.event.inputs.buildType == 'release' && github.event.inputs.multithreaded == 'true'
run: |
docker push ${{ secrets.DOCKER_IMAGE_NAME }}:multi-threaded
docker tag ${{ secrets.DOCKER_IMAGE_NAME }}:multi-threaded ${{ secrets.DOCKER_IMAGE_NAME }}:${{ steps.version.outputs.version }}-multi-threaded
docker push ${{ secrets.DOCKER_IMAGE_NAME }}:${{ steps.version.outputs.version }}-multi-threaded
- name: Git and NPM config
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
npm set //registry.npmjs.org/:_authToken=${{ secrets.NPM_AUTH_TOKEN }}
- name: Publish new beta version to NPM
if: github.event.inputs.buildType == 'release'
run: |
cd website && npm version ${{ steps.version.outputs.version }} --force && cd ..
cd website/ocjs-editor-theme && npm version ${{ steps.version.outputs.version }} --force && cd ../..
cd typedoc-reference-docs && npm version ${{ steps.version.outputs.version }} --force && cd ..
npm version ${{ steps.version.outputs.version }} --force
npm publish --tag=beta
- name: Commit Changes
run: |
git status
git pull
git config --local user.email "[email protected]"
git config --local user.name "github-actions[bot]"
git commit -m "Update OpenCascade.js version" -a
- name: Push Changes to branch
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ github.ref }}