This should stop people from getting "corrupt" copies of node.exe in
their `./tools/bootstrap/.cache` directory. I checked before making this
commit that WebClient.DownloadFile can definitely result in a
half-written file.
Mothblocks forgot to update the bootstrap script to the new python
version when they changed the python dependency version
That path descriptor file is now automatically generated during
bootstrap, which will prevent this issue from happening again in the
future, unless they change the path descriptor format
* Change bootstrapped NodeJS on Windows from 32-bit to 64-bit
* Last node version to support Win7
* Skip platform check
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
As @SpaceManiac said:
A big part of the point of the bootstrap scripts is to provide a reproducible environment
Here I am, web-removing the bit of code that allows using a system-wide version of NodeJS. Now we're vendored only.
From quick test all our helper scripts work fine on 3.7.
Why 3.7.9 instead of latest 3.7.12 ? Embed zips for these versions are missing from python.org ftp. (They apparently do not ship binaries for security-fix only releases)
* Juke Build 0.9.0
* Fix a small bug with build.js
* Distill cmds
* Return sonar
* Revert those build.cmd changes
* Some improvements
* Treat all sonar warnings as errors because they should fail the sonar target
* Do not clean up bootstrap cache because it locks up on removing it
* Fix finding of dreamseeker instances and not die on cache copy failures
* Upgrade dependencies, resolve webpack dependencies explicitly
* Preload tgui asset to fix reloading of a not yet sent tgui asset
* Rewrite node bootstrap and DM build task
* Redundant array accessor
* Add install-state.gz to tgui build dependencies
* Update build.js
* Use a proper dmlang vscode var
Script tools/bootstrap/node_.ps1 will now only download a single node.exe file (32-bit variant) and nothing more.
Since we don't need to unzip, we removed a dependency on a .NET component.
Removed logging, because TGS4 already logs stdout/err, while all this fancy output redirection breaks on older PowerShell versions.
node.bat uses a system-wide node exe if available
CBT will not mislead users by printing things like "missing tgstation.dmb"
Fixes#56676 (can't test because author didn't answer my inquiries on discord)
- Script `tools/bootstrap/node_.ps1` will now only download a single `node.exe` file (32-bit variant) and nothing more.
- Since we don't need to unzip, we removed a dependency on a .NET component.
- Removed logging, because TGS4 already logs stdout/err, while all this fancy output redirection breaks on older PowerShell versions.
- `node.bat` uses a system-wide node exe if available
- CBT will not mislead users by printing things like "missing tgstation.dmb"
Add Common Build Tooling
## Information for Developers
On Windows, the build scripts will automatically install Node. Other
platforms should use their package manager or download it from
https://nodejs.org/en/download/
Pick one:
- VSCode: `Ctrl+Shift+B`
- VSCode: `F5` (build & run with debugger) or `Ctrl+F5` (build & run
without debugger)
- Windows: double-click root `Build.bat` (pause to see output) or
`tools/build/build.bat` (no pause)
- Git Bash and non-Windows: `tools/build/build`
## Information for Server Admins
- TGS scripts will automatically install the version of Node specified
in `dependencies.sh`
- Either use this build script, or compile tgui by running any script
in `tgui/bin` folder.
## Details
Both dm and tgui are now built with a single script. It's pretty easy
to launch: just press `Ctrl+Shift+B` in VSCode, and tada! 🎉
**It's smart.** It will skip certain steps if source files were
untouched for that step. So, if you're only touching dm code, it will
only rebuild dm code, and will skip tgui.
**Syntax is fairly readable and maintainable.**
```js
const { Task, runTasks, exec } = require('./cbt');
const taskTgui = new Task('tgui')
.depends('tgui/yarn.lock')
.depends('tgui/packages/**/*.js')
.provides('tgui/public/*.bundle.*')
.provides('tgui/public/*.chunk.*')
.build(async () => {
await exec('tgui/bin/tgui');
});
runTasks([taskTgui]);
```
**This is a long term solution to the js bundle hell.** Now that we
have a single script to build everything, bundles have been excluded
from the repo, and they will no longer cause conflicts in PRs. This
results in quicker PR turnaround time and less time wasted on
rebuilding tgui for PRs.
**CI pipelines have been updated.** They're not coded in the most
optimal way, just making them green for now.
## Possible future work
- Support compiling with DM defines by passing them as an argument,
like `-D LOWMEMORYMODE`.
- Instead of explicitly listing the task sequence in `runTasks()`,
support specifying tasks in `.depends()`, which in turn will allow
building a graph of dependencies and running things in parallel.
Co-authored-by: Tad Hardesty <tad@platymuus.com>
- Add root Build.bat
- Add trio of tools/bootstrap/ scripts for Node
- Add tools/build/README.md
- Ensure build script and VSC configuration works properly on Linux
- Update TGS4 PreCompile scripts
Co-authored-by: Jordan Brown <Cyberboss@users.noreply.github.com>
- Keep PreCompile scripts compatible with TGS3 as well
- Update LinuxOneShot PreCompile scripts
- Update TGS4 configuration
* Add tools/bootstrap/python
* Add dependencies.sh entry for Python
* Use bootstrapped Python for HitboxExpander
* Use bootstrapped Python when installing hooks
Also:
- Adds tools/hooks/Uninstall.bat
- Removes the need to re-run Install.bat when a .hook file changes
Python path temporarily includes tools/mapmerge2 as before:
- PYTHONPATH in tools/hooks/python.sh handles Linux/virtualenv
- python36._pth handles Windows portable
* Move DMI merge driver to its own directory
* Use bootstrapped Python for makeChangelog.bat
* Set window title in bootstrap PS scripts
* Use slashes in hook paths
* Use relative imports in mapmerge2
* Use bootstrapped Python for mapmerge
* Update mapmerge2 readme
* Skip non-3way conflicts
* Fix relative path issue in posthoc merger
* Add missing call and %* to .bat files
* When installing hooks, don't uninstall them all first
* Make dependencies.sh POSIX
* Move update_paths.py to its own folder
* Use line buffering for Python stdout/stderr
It was switching to fully-buffered mode due to being piped, meaning we
wouldn't see output until the script ended. This is undesirable.
* Use new path to dmi.test in CI suite
* Validate system Python version in bootstrap script
* Add install advice to bootstrap script
* Update path to requirements.txt in CI
* Add upgrader for existing installations