Skip to content

Process for merging a pull request

Stefan Krause edited this page Nov 18, 2023 · 1 revision

Here's a description how my merge process for a pull request works. I use a hetzner linux VPS to build the frameworks for two reasons: Not all frameworks can/might be built on OSX and secondly I don't want to install all those packages on my machine due to security reasons. Some frameworks have little or no real world usage and it would be easy to add some post-install malware.

  1. The local server is running in the background. Either by using npm start in the root directory or by installing the server on linux, by copying js-framework-benchmark-server.service to the appropriate directory and starting with systemctl.

  2. Checking out the PR happens according to the github PR.

  3. Rebuilding the implementation (let's take keyed/vue as an example). If the PR includes an updated package-lock.json (which is recommended) in the directory frameworks/keyed/vue, the rebuild happens via npm run rebuild-ci keyed/vue, and with npm run rebuild keyed/vue otherwise. Both commands first perform a cleanup. The directories or files "yarn-lock", "dist", "elm-stuff", "bower_components", "node_modules", "output" and for rebuild "package-lock.json" are deleted. Then either npm ci (for rebuild-ci) or npm install (for rebuild) is called. After that the script builds the implementation with npm run build-prod. Now follows a very important part. The build is checked whether it can be run and behaves correctly. For the former part the rebuild invokes a short run of the benchmark via npm run bench -- --headless true --smoketest true keyed/vue which performs a short headless run of the benchmark with few iterations to see if the benchmark can find all the required selectors. The latter checks the html structure and if keyed implementations are actually keyed. For that is invokes npm run isKeyed -- --headless true keyed/vue. If all goes well the rebuild process prints a success message like:

All checks are fine!
======> Please rerun the benchmark: npm run bench keyed/vue
  1. The PR is merged (and if there are other PRs we'll continue with step 1) and pushed to github.

  2. The benchmark is run and new preliminary results are published. This may take something between minutes and hours. The script startLocalServerAndUpdateBuild.sh logs into my VPS server, creates a build.zip with all compiled files from all implemenations, downloads and extracts that file and starts the server. (This file is offered as a download for all official runs.)

  3. All currently merged implementations are run plus keyed/vanillajs. The latter serves as a check to see if something in the run behaved odd. This is also the reason those results are labeled preliminary. The chrome or os version might be updated since the last official run. In an official run all frameworks are run (though keyed and non-keyed might be split into two separate runs to allow running in two nights).

  4. The preliminary result table is updated and for all keyed implementations I'm posting a screenshot from the updated results (left side) and the results before the PR (right side). I'm not a fan of non-keyed implementations so I'm not providing this effort (I mean isn't non-keyed all about saving effort?).