fix: install the downloaded decaf binary to a directory, not CWD#121
fix: install the downloaded decaf binary to a directory, not CWD#121levibostian merged 8 commits intomainfrom
Conversation
…actice of installing to `~/.local/bin`. Here's what changed: ## Changes Made 1. **Installation directory**: Changed from `./` (current directory) to `~/.local/bin` - This is the standard XDG Base Directory location for user binaries - Commonly used by Rust tools, Go tools, and many other projects - Already in PATH on most modern Linux distributions and can be easily added on others 2. **Directory creation**: Added `mkdir -p "$INSTALL_DIR"` to ensure the directory exists 3. **PATH checking**: Added helpful feedback that checks if `~/.local/bin` is in the PATH: - If it's already in PATH, users can run `decaf` directly - If not, provides clear instructions on how to add it or run the binary directly 4. **Better output**: Updated the success message to show the full installation path ## Why `~/.local/bin`? This is the standard choice for CI servers and user installations because: - ✅ No sudo required - ✅ Follows XDG Base Directory specification - ✅ Already in PATH on most modern systems (Ubuntu 18.04+, Fedora, etc.) - ✅ Used by major projects like `pipx`, `cargo-binstall`, and many others - ✅ Isolated from system binaries, making it safe for CI environments - ✅ Easy to clean up (just delete `~/.local/bin/decaf`) The script will work perfectly in CI environments since CI runners typically have `~/.local/bin` in their PATH by default.
…ovided instructions. The script is now more minimal - it just installs the binary to `~/.local/bin` and reports where it was installed (install:41).
…kflow. Here's what it does: 1. **Checks out the repository** - Gets the code including the install script 2. **Runs the install script** - Executes `bash install v0.0.1` to test installing a specific version 3. **Verifies the binary** - Checks that: - The file exists at `~/.local/bin/decaf` - The file is executable This is a quick, simple test that validates the core functionality of the install script - that it downloads the binary and places it in the correct location (`~/.local/bin`) with the right permissions. The test runs on `ubuntu-latest` which is sufficient for a basic smoke test.
1. Run `./install` without any arguments (which will install the latest release) 2. Added `"$HOME/.local/bin/decaf" --help` to verify the binary runs successfully The test now checks that: - The file exists at `~/.local/bin/decaf` - The file is executable - The binary can be executed and responds to `--help`
1. Export `$HOME/.local/bin` to the PATH (in case it's not already there) 2. Run just `decaf --help` (not the full path) This ensures we're testing that the binary can be executed via PATH, which is what users would do in practice (.github/workflows/tests.yml:60).
decafRunning deployments in test mode. Results will appear below. ...🟩 squash 🟩 merge method... 🚢 The next version of the project will be: 0.9.1 Learn moreLatest release: 0.9.0 Commit of latest release: ec7c774 Commits since last release: - fix: install the downloaded decaf binary to a directory, not CWD SummaryUpdated the install script to follow XDG Base Directory standards by installing the binary to Why? In some of my projects where I push code to jsr, the jsr publish command will fail unless I add Changes Made
Why These ChangesThe install script is designed for CI environments where:
Installing to
This PR was written using Vibe Kanban I enabled code scanning recently. I got some warnings. This change I used to have this project setup so it would always use the latest This PR does...
This PR contains the following updates:
| Release Notesgranodigital/report-annotate (granodigital/report-annotate)Full Changelog: Full Changelog: What's ChangedFixed
Configuration📅 Schedule: Branch creation - "every weekend" in timezone 🚦 Automerge: Enabled. ♻ Rebasing: Whenever PR is behind base branch, or you tick the 🔕 Ignore: Close this PR and you won't be reminded about this update
This PR was generated by Mend Renovate. Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> This PR contains the following updates: | Package | Change | Release Notesdenoland/deno (deno)
(#31684)
(#31584)
(#31653)
(#31614) Read more: http://deno.com/blog/v2.6
(#31267)
(#31224)
(#31534)
(#31449)
(#31219)
(#31231)
(#31386)
(#31129)
(#31311)
(#31297)
(#31530)
(#31233)
(#31253)
Configuration📅 Schedule: Branch creation - "every weekend" in timezone 🚦 Automerge: Enabled. ♻ Rebasing: Whenever PR is behind base branch, or you tick the 🔕 Ignore: Close this PR and you won't be reminded about this update
This PR was generated by Mend Renovate. Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ...🟩 rebase 🟩 merge method... 🌴 It will not trigger a deployment. No new version will be deployed. Learn moreLatest release: 0.9.0 Commit of latest release: ec7c774 Commits since last release: - Done! I've updated the test to use `which decaf` instead of `decaf --help`. The `which` command will verify that the `decaf` binary is available in the PATH (.github/workflows/tests.yml:57). - Done! The test now only runs `decaf --help` directly, which will verify that the binary is in the PATH (.github/workflows/tests.yml:56). - Done! I've simplified the test to only run `decaf --help` after adding `~/.local/bin` to PATH. The test file checks have been removed as requested (.github/workflows/tests.yml:57-60). - Perfect! I've updated the test to: 1. Export `$HOME/.local/bin` to the PATH (in case it's not already there) 2. Run just `decaf --help` (not the full path) This ensures we're testing that the binary can be executed via PATH, which is what users would do in practice (.github/workflows/tests.yml:60).
The test now checks that:
This is a quick, simple test that validates the core functionality of the install script - that it downloads the binary and places it in the correct location ( Changes Made
Why
|
| Package | Type | Update | Change |
|---|
|
granodigital/report-annotate
| action | minor | v3.0.0 → v3.1.1 |
Release Notes
granodigital/report-annotate (granodigital/report-annotate)
Full Changelog:
granodigital/report-annotate@v3.1.0...v3.1.1
Full Changelog:
granodigital/report-annotate@v3.0.1...v3.1.0
What's Changed
Fixed
- Improved PR comment formatting with clickable file links when
annotations are skipped - Added validation for invalid report format configuration
- Added error handling for malformed YAML config files
- Added error handling for invalid custom-matchers JSON input
- Skip annotations with empty messages to avoid creating blank
annotations - Improved error messages and handling in XML report parsing
- Ensure all annotations have a start line for proper GitHub display
- Added test coverage for invalid YAML config parsing error handling
- Excluded untestable xpath fallback code from coverage reporting
Configuration
📅 Schedule: Branch creation - "every weekend" in timezone
America/Chicago, Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update
again.
- If you want to rebase/retry this PR, check
this box
This PR was generated by Mend Renovate.
View the repository job
log.
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
- chore(deps): update dependency deno to v2.6.3 (#119)
This PR contains the following updates:
| Package | Change |
Age |
Confidence |
|---|---|---|---|
| deno
(source) | v2.5.6 ->
2.6.3 |
|
|
Release Notes
denoland/deno (deno)
- fix(check): improve node types handling
- Revert "fix(ext/node): stub out Module.register and
Module.registerHooks"
(#31684)
- feat(unstable): add sandbox subcommand
(#31568) - fix(audit): fix deserde for transitive npm audit actions
(#31671) - fix(check): handle workspace members having different jsx import
sources and
importing each other
(#31654) - fix(check): regression with tsgo and node globals
(#31621) - fix(cli): deno tunnel when token storage isn't working or without
deno.json
(#31584)
- fix(compile): ensure temp dir exists during x64 codesign
(#31672) - fix(ext/node):
sqlite:backupcompatibility
(#31610) - fix(ext/node): add error handling functions and tests for UV bindings
(#31639) - fix(ext/node): avoid env permission for TERM in console and readline
(#31638) - fix(ext/node): fix hot loop in
setImmediatewith a pending timer
(#31643) - fix(ext/node): stub out Module.register and Module.registerHooks
(#31666) - fix(ext/node): support named pipe listen, connect and open
(#31624) - fix(ext/telemetry): otel baggage propagation
(#31620) - fix(fetch): fix SOCKS5 proxy URL validation logic
(#31604) - fix(flags): implement a better sandbox subcommand
(#31657) - fix(inspector): worker debugging support via CDP
(#31527) - fix(x): cache on demand when running, resolve packages with only one
binary,
don't fail on node-gyp if not present
(#31619) - fix(x): fix shim script when use custom alias name, re-enable alias
tests
(#31653)
- fix: panic on dropped inspector session
(#31658) - fix: update glob implementation to match with latest node
(#31627)
- feat(unstable): deploy config allow app to be optional
(#31567) - fix(add): include type-only imports when building graph
(#31552) - fix(cli): add streams as transferable types
(#31586) - fix(compile): intel mac compile fix
(#31575) - fix(compile): sentinal conflict with strtab on intel mac
(#31587) - fix(ext/node):
DatabaseSynccompatibility
(#31515) - fix(x): correct alias deno command location for Windows
(#31573) - fix(x): fix executing native binary on windows + some cleanup
(#31551) - fix: --preload and --require flags only available in runtime
subcommands
(#31614)
Read more: http://deno.com/blog/v2.6
- feat(BREAKING/install): require
--for script arg indeno install -gand
support installing multiple packages
(#31292) - feat(cli): add approve-scripts AKA "approve-builds" subcommand
(#31472) - feat(cli): filter out common internal frames that add noise, dim and
grey
internal frames in stack traces
(#31247) - feat(cli): print working dir in grey in stack traces, relative paths
in
check + compile output
(#31194) - feat(config): allow storing npm constraints to allow running lifecycle
scripts
for
(#31075) - feat(coverage): add dark-mode toggle for html output
(#31140) - feat(ext/node): implement FileHandle.appendFile(data[, options])
(#31301) - feat(ext/web): add
ImageDataFloat16Arraysupport
(#31394) - feat(ext/web): stabilize
BroadcastChannel
(#30770) - feat(ext/web): transferable {Readable,Writable,Transform}Stream
(#31126) - feat(init/npm): add --yes flag to bypass prompt
(#31499) - feat(install): add
--lockfile-onlyflag
(#31376) - feat(lint): plugin API has env and read access
(#31327) - feat(node): allow subpath imports that start with '#/'
(#31520) - feat(permissions): allow
Deno.env.toObject()for partial env
permission
(#31267)
- feat(permissions): allow flags should override deny when more specific
(#31224)
- feat(process): support integer signals in Deno.kill and child.kill
(#31153) - feat(unstable): add socket.dev integration for
deno audit
(#31106) - feat(unstable): support authenticated socket.dev audit reports
(#31370) - feat(upgrade): ability to show additional message on upgrade
(#31170) - feat: V8 14.2
(#31178) - feat:
--ignore-read
(#31363) - feat:
deno init --empty
(#31516) - feat: add --require run arg to support commonJS
(#31201) - feat: add Float16Array support
(#31410) - feat: add
--ignore-env=...
(#31187) - feat: add
deno x(aliasdx) for conveniently running binaries from
packages
(#31138) - feat: add native source maps support
(#31268) - feat: include
@types/nodetype declarations out of the box
(#31502) - feat: support
publish: falseindeno.json
(#30852) - feat: use Node.js timers by default
(#31272) - feat: wasm source phase imports
(#31486) - fix(audit): remove unwrap in favor of log, don't print empty reports
(#31479) - fix(bundle): Deno.bundle work in Worker
(#31316) - fix(bundle): avoid name clash in hack
(#31409) - fix(bundle): do not error on failing to clean up esbuild dir
(#31408) - fix(bundle): don't use createRequire when targeting browser in
Deno.bundle
(#31534)
- fix(bundle): fix import.meta.main transform with jsr entrypoint
(#31415) - fix(bundle): support android
(#31521) - fix(bundle): treat bun specifiers as external by default
(#31411) - fix(check): ensure
@types/nodeis cached when already in resolution
(#31235) - fix(check): fix nil deref with
--unstable-tsgo
(#31416) - fix(check): move types not found error to tsc diagnostic
(#31509) - fix(check): move unknown builtin node: module errors to tsc
diagnostics
(#31449)
- fix(cli): make --eval-file flag work without equals sign
(#31151) - fix(cli): put tasks first in zsh dynamic completions
(#31350) - fix(compile): support --preload flag in deno compile
(#31152) - fix(config): support UTF-16 surrogate pairs in unicode escape
sequences in
json config
(#31264) - fix(deps): use windows-sys for all windows targets
(#31308) - fix(ext/napi): suppress deprecated Buffer warnings
(#31245) - fix(ext/net): support IPv6 zone indices in Deno.connect()
(#31123) - fix(ext/node): Add sqlite
setAllowUnknownNamedParametersoption
(#31202) - fix(ext/node): FileHandle compatibility
(#31164) - fix(ext/node):
StatementSync.iterate()should reset
is_iter_finishedflag
on every call
(#31361) - fix(ext/node):
url.domainToASCIIreturns empty string for invalid
domains
(#31219)
- fix(ext/node): autopadding behavior on
crypto.Cipheriv
(#31389) - fix(ext/node): define process.versions.sqlite
(#31277) - fix(ext/node): ensure 'exit' event is fired only once for
worker_threads
(#31231)
- fix(ext/node): export ppid
(#31137) - fix(ext/node): fix sqlite extension used for testing; ensure related
tests are
actually meaningful
(#31455) - fix(ext/node): implement
DatabaseSync.aggregate()
(#31461) - fix(ext/node): implement
DatabaseSync.function()and better error
details
(#31386)
- fix(ext/node): implement
dns.lookupService
(#31310) - fix(ext/node): implement
process.setegid()
(#31155) - fix(ext/node): implement
process.setgid()andprocess.setuid()
(#31162) - fix(ext/node): implement
process:seteuid()
(#31160) - fix(ext/node): implement performance.timerify()
(#31238) - fix(ext/node): implement util.getSystemErrorMessage()
(#31147) - fix(ext/node): prevent cipher operations after finalize
(#31533) - fix(ext/node): reimplement
setImmediateAPI
(#30328) - fix(ext/node): respect abort signal option on
FileHandle.readFile
(#31462) - fix(ext/node): respects
flagoption onfs.readfileand
fs.readfilesync
(#31129)
- fix(ext/node): segfault on calling
StatementSyncmethods after
connection
has closed
(#31331) - fix(ext/node): sqlite
setAllowUnknownNamedParameterserror message
(#31319) - fix(ext/node): sqlite.DatabaseSync explicit resource management
compatibility
(#31311)
- fix(ext/node): truncate first non-hex value on Buffer.from
(#31227) - fix(ext/signals): don't run exit hooks at non-exit times
(#31269) - fix(ext/web): Event dispatch should continue after reporting exception
(#31297)
- fix(ext/web): console.dir respects indent level
(#31412) - fix(install): report installed npm packages when not using
node_modules, fix
double counting
(#31536) - fix(install): rewrite node_modules .bin shim generation for windows
to be like
npm
(#31494) - fix(lsp):
organizeImportswithout resolving specifiers
(#31230) - fix(lsp): don't provide organizeImports action when client provides it
(#31530)
- fix(lsp): lint-ignore directives follow leading comments
(#31200) - fix(lsp): set lockfile_skip_write unconditionally
(#31191) - fix(lsp): store assigned compiler options for cache files
(#31377) - fix(node): ensure process.argv is an array of strings
(#31322) - fix(node): missing
statfsexport fromnode:fs/promises
(#31528) - fix(node): stub missing process.sourceMapsEnabled
(#31358) - fix(node): support advanced serialization in IPC
(#31380) - fix(node/assert): deepStrictEqual now correctly handles Number objects
(#31233)
- fix(node/crypto): respect authTagLength in createCipheriv for GCM cip…
(#31253)
- fix(node/net): return string
familyinserver.address()
(#31465) - fix(node/process): make
process.stdin.isTTYwritable
(#31464) - fix(node/timers): ensure active timers entry is deleted on
Timeout.prototype.refresh
(#31436) - fix(node:console): ensure that the node:console implementation has an
implementation foremitWarningin scope
(#31263) - fix(resolver): fall back to execution if can't resolve types
(#31507) - fix(schema): add bundle to unstable field schema
(#31395) - fix(test): Remove ANSI Escape Codes for Junit Reports
(#30854) - fix(tsgo): do not error out on non js/ts imports from npm packages
(#31478) - fix(tunnel): misc fixes
(#30968) - fix(types): add Symbol.iterator to NodeListOf (fixes
#31382)
(#31384) - fix(unstable): don't panic on invalid reported lint range
(#31261) - fix:
is_elfpanic in sui
(#31388) - fix: change errors message suggesting to run approve-scripts
(#31493) - fix: clippy::derivable_impls
(#31460) - fix: fetch fd leak
(#31375) - fix: fix npx running in test, make approve-scripts test less flaky
(#31501) - fix: make '@types' package
resolution more consistent
(#31512) - fix: skip doing npm resolution in more cases
(#31305) - fix: update JSDoc for Deno.cwd() API
(#31256) - fix: update deno_error to 0.7.1
(#31450) - fix: update permission-broker-response.v1.json
(#31328) - fix: upgrade denokv_* to 0.13 and rusqlite to 0.27
(#31374) - fix: upgrade to swc_ecma_parser 27
(#31427) - fix: wpt assert expectation correctly even if the filter has a layer
(#30574) - perf(node): implement getOwnNonIndexProperties in native code
(#31393) - perf(node): optimize Buffer compare
(#31425)
Configuration
📅 Schedule: Branch creation - "every weekend" in timezone
America/Chicago, Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update
again.
- If you want to rebase/retry this PR, check
this box
This PR was generated by Mend Renovate.
View the repository job
log.
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
- chore(deps): update granodigital/report-annotate action to v3
install script so that we dont put the downloaded binary in the cwd, but somewhere else. (vibe-kanban)
Pull Request Test Coverage Report for Build 20782915410Details
💛 - Coveralls |
…g `~/.local/bin` to PATH. The test file checks have been removed as requested (.github/workflows/tests.yml:57-60).
…fy that the binary is in the PATH (.github/workflows/tests.yml:56).
…help`. The `which` command will verify that the `decaf` binary is available in the PATH (.github/workflows/tests.yml:57).
26c0691 to
9f5a5e8
Compare
| test-install-script: | ||
| runs-on: ubuntu-latest | ||
|
|
||
| steps: | ||
| - name: Checkout repository | ||
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 | ||
|
|
||
| - name: Run install script | ||
| run: ./install | ||
|
|
||
| - name: Verify binary was installed |
Check warning
Code scanning / CodeQL
Workflow does not contain permissions Medium test
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 3 months ago
In general, the fix is to add an explicit permissions: block that sets the minimal required GITHUB_TOKEN scopes. Because none of the steps in the workflow interacts with the GitHub API in a way that needs write access (they only checkout code, run Deno commands locally, upload artifacts, and send coverage to Coveralls), we can safely set contents: read and leave everything else at the default of none. This should be added at the workflow root so it applies to both jobs.
The single best fix without changing functionality is to add a top‑level permissions: block right after the on: declaration. This ensures both test and test-install-script jobs inherit contents: read, and no job gets unnecessary write permissions. No imports or additional methods are needed; this is purely a YAML configuration change inside .github/workflows/tests.yml.
Concretely:
- Edit
.github/workflows/tests.yml. - Insert:
permissions:
contents: readbetween line 1 (on: [push, pull_request]) and line 3 (jobs:), preserving indentation (top-level).
| @@ -1,5 +1,8 @@ | ||
| on: [push, pull_request] | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| test: | ||
| runs-on: ubuntu-latest |
Summary
Updated the install script to follow XDG Base Directory standards by installing the binary to
~/.local/bininstead of the current working directory.Why? In some of my projects where I push code to jsr, the jsr publish command will fail unless I add
--allow-dirtyto the command. I dont like doing this, the binary should be put somewhere else honestly.Changes Made
Install script (
install):./to~/.local/bin~/.local/binif it doesn't existCI workflow (
.github/workflows/tests.yml):test-install-scriptjob to verify the install script worksdecaf --help)Why These Changes
The install script is designed for CI environments where:
rustup,cargo-binstall, andpipxInstalling to
~/.local/binprovides:This PR was written using Vibe Kanban