Improve development experience
I'm trying to contribute to the repo, but was unable to find a way to do that.
Here are the steps I took:
- Open the repository in code spaces
- Make changes
How do I test before committing?
I tried to start Live Preview. I then changed the URL to curl -sS https://super-duper-rotary-phone-p66x959p45397g-3000.app.github.dev/shfmt | sh, but the result I got back was HTML.
There is some sort of url handler, but I have no idea how to invoke it.
The next thing I tried was yarn start and npm start hoping it would be easy to start a server with proper URL handling, but that was missing also.
Then i read more documentation and after realizing that packages were renamed to webi-installers ran the following:
$ node _webi/test.js ./pwsh
node:internal/modules/cjs/loader:1147
throw err;
^
Error: Cannot find module './build-classifier/host-targets.js'
Require stack:
- /workspaces/webi-installers/_webi/builds-cacher.js
- /workspaces/webi-installers/_webi/builds.js
- /workspaces/webi-installers/_webi/test.js
at Module._resolveFilename (node:internal/modules/cjs/loader:1144:15)
at Module._load (node:internal/modules/cjs/loader:985:27)
at Module.require (node:internal/modules/cjs/loader:1235:19)
at require (node:internal/modules/helpers:176:18)
at Object.<anonymous> (/workspaces/webi-installers/_webi/builds-cacher.js:8:19)
at Module._compile (node:internal/modules/cjs/loader:1376:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
at Module.load (node:internal/modules/cjs/loader:1207:32)
at Module._load (node:internal/modules/cjs/loader:1023:12)
at Module.require (node:internal/modules/cjs/loader:1235:19) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/workspaces/webi-installers/_webi/builds-cacher.js',
'/workspaces/webi-installers/_webi/builds.js',
'/workspaces/webi-installers/_webi/test.js'
]
}
The clone command needs to include submodules. Alternatively they should be brought in later if, for example, git clone was donw by codespaces
git submodule update --init
On one of my machines I've been getting:
[INFO] getLatestBuilds: kubens
dbg: Installer User-Agent: win32/10.0.22621 x64/unknown libc
dbg: Installer Host Target:
{ errors: [], libc: 'libc' }
[INFO] getLatestBuilds: pwsh
C:\Code\webi-installers\_webi\serve-installer.js:68
throw new Error(`OS could not be identified by User-Agent '${unameAgent}'`);
^
Error: OS could not be identified by User-Agent 'win32/10.0.22621 x64/unknown libc'
at InstallerServer.helper (C:\Code\webi-installers\_webi\serve-installer.js:68:11)
at C:\Code\webi-installers\_webi\test.js:85:42
Node.js v21.6.2
I needed to disable that line.
Now the message I'm getting is:
Do the scripts actually work?
NEEDS MANUAL TEST: sh install-pwsh.sh
NEEDS MANUAL TEST: powershell.exe install-pwsh.ps1
Perhaps it is my fault, but it took me a while to realize that the script actually created new files in the root directory.
Turns out it generated:
export WEBI_HOST='undefined'
Setting the variable before running node didn't help either, so I overwrote it manually.
Now I have a few options:
- Test on host machine. I already have PWSH there and I don't want to remove it - no good
- Spin a new container to test. Here is my output.
🚀 podman run --name=pwsh_test --rm -it -v C:\Code\webi-installers\install-pwsh.sh:/tmp/install.sh docker.io/catthehacker/ubuntu:act-latest bash
root@d4f113f79c43:/tmp# WEBI_TAG=7.4.1
root@d4f113f79c43:/tmp# ./install.sh
>>> Welcome to Webi! - modern tools, instant installs. <<<
We expect your experience to be absolutely perfect!
Success? Star it! https://github.com/webinstall/webi-installers
Problem? Report it: https://github.com/webinstall/webi-installers/issues
(your system is GNU/Linux/x86_64 with libc & curl+wget)
Downloading https://webinstall.dev/packages/webi/webi.sh
to ~/.local/bin/webi
Installing pwsh ...
Found ~/.local/bin
Error: no 'pwsh@Unknown Tag' release for 'Unknown OS' (libc) on 'Unknown CPU' as one of 'exe,xz,tar,zip,git'
Latest Version: v7.5.0-preview.1
CPUs: armv7 aarch64 x86_64 x86
OSes: linux darwin windows
libcs: none musl
Package Formats: .tar.gz .pkg .zip .msi
(check that the package name and version are correct)
Double check at undefined/api/releases/[email protected]
?os=-&arch=-&libc=libc&formats=exe,xz,tar,zip,git&pretty=true
At this point I'm giving up.
What I think should happen is:
- Open repo in locally or in a container (containers install all prerequisites such as
shfmtautomatically) -
yarn && yarn startornpm install && npm startwhich spins a server where everything is configured and all that's needed to test would be to replace the host name - Ensure everything works and commit
All your points are valid.
There's a lot of complexity, and some of it is beyond the essential complexity, out into accidental complexity territory.
It looks like I need to update the local testing process and documentation.
Originally the locally-generated installers were network-free, but a few months back I made some changes that inadvertently require network access to give some non-essential information - such as the current version of the software.
Rather than invest the time into solving that specific problem, I'd rather move forward with the roadmap to move the install process away from plugin-style functions and towards template generated installers.
... but I don't think I'm in a good place to dedicate that much time to it... so maybe the former is the better option.