diff --git a/.github/workflows/test-jsx.yml b/.github/workflows/test-jsx.yml new file mode 100644 index 00000000..e1479de6 --- /dev/null +++ b/.github/workflows/test-jsx.yml @@ -0,0 +1,108 @@ +# This is a GitHub workflow defining a set of jobs with a set of steps. +# ref: https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions +# +name: Test jsx (admin-react.js) + +on: + pull_request: + paths: + - "jsx/**" + - ".github/workflows/test-jsx.yml" + push: + paths: + - "jsx/**" + - ".github/workflows/test-jsx.yml" + branches-ignore: + - "dependabot/**" + - "pre-commit-ci-update-config" + tags: + - "**" + workflow_dispatch: + +jobs: + # The ./jsx folder contains React based source code files that are to compile + # to share/jupyterhub/static/js/admin-react.js. The ./jsx folder includes + # tests also has tests that this job is meant to run with `yarn test` + # according to the documentation in jsx/README.md. + test-jsx-admin-react: + runs-on: ubuntu-20.04 + timeout-minutes: 5 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: "14" + + - name: Install yarn + run: | + npm install -g yarn + + - name: yarn + run: | + cd jsx + yarn + + - name: yarn test + run: | + cd jsx + yarn test + + # The ./jsx folder contains React based source files that are to compile to + # share/jupyterhub/static/js/admin-react.js. This job makes sure that whatever + # we have in jsx/src matches the compiled asset that we package and + # distribute. + # + # This job's purpose is to make sure we don't forget to compile changes and to + # verify nobody sneaks in a change in the hard to review compiled asset. + # + # NOTE: In the future we may want to stop version controlling the compiled + # artifact and instead generate it whenever we package JupyterHub. If we + # do this, we are required to setup node and compile the source code + # more often, at the same time we could avoid having this check be made. + # + compile-jsx-admin-react: + runs-on: ubuntu-20.04 + timeout-minutes: 5 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: "14" + + - name: Install yarn + run: | + npm install -g yarn + + - name: yarn + run: | + cd jsx + yarn + + - name: yarn build + run: | + cd jsx + yarn build + + - name: yarn place + run: | + cd jsx + yarn place + + - name: Verify compiled jsx/src matches version controlled artifact + run: | + if [[ `git status --porcelain=v1` ]]; then + echo "The source code in ./jsx compiles to something different than found in ./share/jupyterhub/static/js/admin-react.js!" + echo + echo "Please re-compile the source code in ./jsx with the following commands:" + echo + echo "yarn" + echo "yarn build" + echo "yarn place" + echo + echo "See ./jsx/README.md for more details." + exit 1 + else + echo "Compilation of jsx/src to share/jupyterhub/static/js/admin-react.js didn't lead to changes." + fi diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9463184e..e68eb45b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -31,33 +31,6 @@ env: PYTEST_ADDOPTS: "--verbose --color=yes" jobs: - jstest: - # Run javascript tests - runs-on: ubuntu-20.04 - timeout-minutes: 5 - steps: - - uses: actions/checkout@v2 - # NOTE: actions/setup-node@v1 make use of a cache within the GitHub base - # environment and setup in a fraction of a second. - - name: Install Node - uses: actions/setup-node@v1 - with: - node-version: "14" - - - name: Install Node dependencies - run: | - npm install -g yarn - - - name: Run yarn - run: | - cd jsx - yarn - - - name: yarn test - run: | - cd jsx - yarn test - # Run "pytest jupyterhub/tests" in various configurations pytest: runs-on: ubuntu-20.04