Build OCJS #4
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: 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 }} |