Add crate version and commit hash to ldk-server - #229

Merged
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash
Jun 24, 2026
Merged

Add crate version and commit hash to ldk-server#229
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash

Conversation

@benthecarman

Copy link
Copy Markdown
Collaborator

We will now log the version number and commit hash when starting up. Also will give the full commit hash when doing ldk-server --version to better help debugging things.

Also does the same to the cli

@ldk-reviews-bot

ldk-reviews-bot commented Jun 8, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @tankyleo as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

let (shutdown_tx, shutdown_rx) = tokio::sync::watch::channel(false);

info!("Starting up...");
info!("Starting ldk-server version {FULL_VERSION}");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we also do this when we rotate the logs ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can do after #189

Comment threadldk-server/build.rs

fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-env-changed=GIT_HASH");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we make sure to update GIT_HASH if HEAD changes after the first from-clean build. Here it seems HEAD could change, and we'd ship a binary with a wrong rev ?

Or perhaps cargo install always re-runs build.rs so we might be good here.

@tankyleotankyleoJun 8, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also trying to understand how this triggers. After build.rs sets GIT_HASH, what other thing could cause GIT_HASH to change, and trigger build.rs again ?

@benthecarmanbenthecarmanJun 16, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made it so it watches the git hash file so if it changes then we recalc

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vibed with codex, pushed the suggestions in a commit, let me know what you think @benthecarman

The findings:

_ Findings
1. High: inherited GIT_HASH overrides the real repository hash in both build scripts: ldk-server/build.rs:33, ldk-server-cli/build.rs:33. Your report is correct. If the shell exports GIT_HASH, the script skips cargo:rustc-env, so env!("GIT_HASH") compiles the caller_s stale value. I reproduced:
GIT_HASH=stale-from-env cargo run -q -p ldk-server-cli -- --version -> ldk-server-cli 0.1.0 (stale-from-env), and same for ldk-server.
Suggested fix: always compute from git rev-parse HEAD when git is available, then emit cargo:rustc-env=GIT_HASH=.... Only fall back to the environment when git is unavailable, or use a package-specific override variable.
2. Medium: packed branch refs can also leave the hash stale: ldk-server/build.rs:28, ldk-server-cli/build.rs:28, ldk-server/build.rs:54. If the current branch exists only in .git/packed-refs, watch_if_exists skips .git/refs/heads/<branch>. The next commit creates that loose ref, but HEAD and
packed-refs do not change, so Cargo does not rerun the build script. I reproduced this in a throwaway clone: after an empty commit advanced HEAD from 5d6e906... to 80648b9..., ldk-server-cli --version still printed 5d6e906....
Suggested fix: print cargo:rerun-if-changed for the symbolic ref path even when it does not exist yet. I validated that Cargo then reruns when Git creates the file.
Checks run: cargo fmt --all -- --check, cargo check -p ldk-server, cargo check -p ldk-server-cli, configured cargo clippy --all-features -- -D warnings -A clippy::drop_non_drop, cargo test -p ldk-server-cli, and cargo test -p ldk-server all passed.

@tankyleo
tankyleo requested review from tankyleo and removed request for tankyleoJune 22, 2026 16:06
@benthecarman

Copy link
Copy Markdown
CollaboratorAuthor

@tankyleo thanks I like those changes. Squashed them into my commits and added you as co-author

benthecarmanand others added 2 commits June 22, 2026 19:53
We will now log the version number and commit hash when starting up.
Also will give the full commit hash when doing ldk-server --version to
better help debugging things.
Co-authored-by: Leo Nash <hello@leonash.net>
Co-authored-by: Leo Nash <hello@leonash.net>

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do we want to do with docker? Had codex produce this commit below, could also read the external GIT_HASH env var

Date: Wed Jun 24 16:38:56 2026 +0000
Let Docker builds read Git metadata
Stop excluding .git from the Docker build context. The version build
scripts can then discover HEAD during image builds, matching local Cargo
builds when the source comes from a normal checkout.
Keep the existing GIT_HASH environment fallback for builds that do not
have Git metadata available. That fallback remains the last resort after
git rev-parse HEAD fails, and Cargo still reruns the build scripts when
the fallback value changes.
AI-Generated-By: OpenAI Codex
diff --git a/.dockerignore b/.dockerignore
index a4ec515..d21fbcc 100644
--- a/.dockerignore+++ b/.dockerignore@@ -1,6 +1,5 @@
target/
**/target/
-.git/
.gitignore
.github/
.claude/

The Docker build excludes .git via .dockerignore, so the build
scripts cannot derive the commit hash from git and fall back to
"unknown". Declare GIT_HASH as a build arg and export it as an env
var so the build scripts can embed it when callers pass the hash via
--build-arg.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@benthecarman

benthecarman commented Jun 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

I'd rather not include the whole git dir in the build. Made it so we can pass the env var as an arg. This way we can also do like 0.3.0 instead of a commit hash so the build looks more like an official release

@benthecarman
benthecarman merged commit 8163f4f into lightningdevkit:mainJun 24, 2026
8 checks passed
@benthecarman
benthecarman deleted the commit-hash branch June 24, 2026 20:18
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@benthecarman@ldk-reviews-bot@tankyleo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add crate version and commit hash to ldk-server - #229

Merged
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash
Jun 24, 2026
Merged

Add crate version and commit hash to ldk-server#229
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash

Conversation

@benthecarman

Copy link
Copy Markdown
Collaborator

We will now log the version number and commit hash when starting up. Also will give the full commit hash when doing ldk-server --version to better help debugging things.

Also does the same to the cli

@ldk-reviews-bot

ldk-reviews-bot commented Jun 8, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @tankyleo as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

let (shutdown_tx, shutdown_rx) = tokio::sync::watch::channel(false);

info!("Starting up...");
info!("Starting ldk-server version {FULL_VERSION}");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we also do this when we rotate the logs ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can do after #189

Comment threadldk-server/build.rs

fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-env-changed=GIT_HASH");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we make sure to update GIT_HASH if HEAD changes after the first from-clean build. Here it seems HEAD could change, and we'd ship a binary with a wrong rev ?

Or perhaps cargo install always re-runs build.rs so we might be good here.

@tankyleotankyleoJun 8, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also trying to understand how this triggers. After build.rs sets GIT_HASH, what other thing could cause GIT_HASH to change, and trigger build.rs again ?

@benthecarmanbenthecarmanJun 16, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made it so it watches the git hash file so if it changes then we recalc

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vibed with codex, pushed the suggestions in a commit, let me know what you think @benthecarman

The findings:

_ Findings
1. High: inherited GIT_HASH overrides the real repository hash in both build scripts: ldk-server/build.rs:33, ldk-server-cli/build.rs:33. Your report is correct. If the shell exports GIT_HASH, the script skips cargo:rustc-env, so env!("GIT_HASH") compiles the caller_s stale value. I reproduced:
GIT_HASH=stale-from-env cargo run -q -p ldk-server-cli -- --version -> ldk-server-cli 0.1.0 (stale-from-env), and same for ldk-server.
Suggested fix: always compute from git rev-parse HEAD when git is available, then emit cargo:rustc-env=GIT_HASH=.... Only fall back to the environment when git is unavailable, or use a package-specific override variable.
2. Medium: packed branch refs can also leave the hash stale: ldk-server/build.rs:28, ldk-server-cli/build.rs:28, ldk-server/build.rs:54. If the current branch exists only in .git/packed-refs, watch_if_exists skips .git/refs/heads/<branch>. The next commit creates that loose ref, but HEAD and
packed-refs do not change, so Cargo does not rerun the build script. I reproduced this in a throwaway clone: after an empty commit advanced HEAD from 5d6e906... to 80648b9..., ldk-server-cli --version still printed 5d6e906....
Suggested fix: print cargo:rerun-if-changed for the symbolic ref path even when it does not exist yet. I validated that Cargo then reruns when Git creates the file.
Checks run: cargo fmt --all -- --check, cargo check -p ldk-server, cargo check -p ldk-server-cli, configured cargo clippy --all-features -- -D warnings -A clippy::drop_non_drop, cargo test -p ldk-server-cli, and cargo test -p ldk-server all passed.

@tankyleo
tankyleo requested review from tankyleo and removed request for tankyleoJune 22, 2026 16:06
@benthecarman

Copy link
Copy Markdown
CollaboratorAuthor

@tankyleo thanks I like those changes. Squashed them into my commits and added you as co-author

benthecarmanand others added 2 commits June 22, 2026 19:53
We will now log the version number and commit hash when starting up.
Also will give the full commit hash when doing ldk-server --version to
better help debugging things.
Co-authored-by: Leo Nash <hello@leonash.net>
Co-authored-by: Leo Nash <hello@leonash.net>

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do we want to do with docker? Had codex produce this commit below, could also read the external GIT_HASH env var

Date: Wed Jun 24 16:38:56 2026 +0000
Let Docker builds read Git metadata
Stop excluding .git from the Docker build context. The version build
scripts can then discover HEAD during image builds, matching local Cargo
builds when the source comes from a normal checkout.
Keep the existing GIT_HASH environment fallback for builds that do not
have Git metadata available. That fallback remains the last resort after
git rev-parse HEAD fails, and Cargo still reruns the build scripts when
the fallback value changes.
AI-Generated-By: OpenAI Codex
diff --git a/.dockerignore b/.dockerignore
index a4ec515..d21fbcc 100644
--- a/.dockerignore+++ b/.dockerignore@@ -1,6 +1,5 @@
target/
**/target/
-.git/
.gitignore
.github/
.claude/

The Docker build excludes .git via .dockerignore, so the build
scripts cannot derive the commit hash from git and fall back to
"unknown". Declare GIT_HASH as a build arg and export it as an env
var so the build scripts can embed it when callers pass the hash via
--build-arg.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@benthecarman

benthecarman commented Jun 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

I'd rather not include the whole git dir in the build. Made it so we can pass the env var as an arg. This way we can also do like 0.3.0 instead of a commit hash so the build looks more like an official release

@benthecarman
benthecarman merged commit 8163f4f into lightningdevkit:mainJun 24, 2026
8 checks passed
@benthecarman
benthecarman deleted the commit-hash branch June 24, 2026 20:18
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@benthecarman@ldk-reviews-bot@tankyleo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add crate version and commit hash to ldk-server - #229

Merged
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash
Jun 24, 2026
Merged

Add crate version and commit hash to ldk-server#229
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash

Conversation

@benthecarman

Copy link
Copy Markdown
Collaborator

We will now log the version number and commit hash when starting up. Also will give the full commit hash when doing ldk-server --version to better help debugging things.

Also does the same to the cli

@ldk-reviews-bot

ldk-reviews-bot commented Jun 8, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @tankyleo as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

let (shutdown_tx, shutdown_rx) = tokio::sync::watch::channel(false);

info!("Starting up...");
info!("Starting ldk-server version {FULL_VERSION}");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we also do this when we rotate the logs ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can do after #189

Comment threadldk-server/build.rs

fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-env-changed=GIT_HASH");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we make sure to update GIT_HASH if HEAD changes after the first from-clean build. Here it seems HEAD could change, and we'd ship a binary with a wrong rev ?

Or perhaps cargo install always re-runs build.rs so we might be good here.

@tankyleotankyleoJun 8, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also trying to understand how this triggers. After build.rs sets GIT_HASH, what other thing could cause GIT_HASH to change, and trigger build.rs again ?

@benthecarmanbenthecarmanJun 16, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made it so it watches the git hash file so if it changes then we recalc

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vibed with codex, pushed the suggestions in a commit, let me know what you think @benthecarman

The findings:

_ Findings
1. High: inherited GIT_HASH overrides the real repository hash in both build scripts: ldk-server/build.rs:33, ldk-server-cli/build.rs:33. Your report is correct. If the shell exports GIT_HASH, the script skips cargo:rustc-env, so env!("GIT_HASH") compiles the caller_s stale value. I reproduced:
GIT_HASH=stale-from-env cargo run -q -p ldk-server-cli -- --version -> ldk-server-cli 0.1.0 (stale-from-env), and same for ldk-server.
Suggested fix: always compute from git rev-parse HEAD when git is available, then emit cargo:rustc-env=GIT_HASH=.... Only fall back to the environment when git is unavailable, or use a package-specific override variable.
2. Medium: packed branch refs can also leave the hash stale: ldk-server/build.rs:28, ldk-server-cli/build.rs:28, ldk-server/build.rs:54. If the current branch exists only in .git/packed-refs, watch_if_exists skips .git/refs/heads/<branch>. The next commit creates that loose ref, but HEAD and
packed-refs do not change, so Cargo does not rerun the build script. I reproduced this in a throwaway clone: after an empty commit advanced HEAD from 5d6e906... to 80648b9..., ldk-server-cli --version still printed 5d6e906....
Suggested fix: print cargo:rerun-if-changed for the symbolic ref path even when it does not exist yet. I validated that Cargo then reruns when Git creates the file.
Checks run: cargo fmt --all -- --check, cargo check -p ldk-server, cargo check -p ldk-server-cli, configured cargo clippy --all-features -- -D warnings -A clippy::drop_non_drop, cargo test -p ldk-server-cli, and cargo test -p ldk-server all passed.

@tankyleo
tankyleo requested review from tankyleo and removed request for tankyleoJune 22, 2026 16:06
@benthecarman

Copy link
Copy Markdown
CollaboratorAuthor

@tankyleo thanks I like those changes. Squashed them into my commits and added you as co-author

benthecarmanand others added 2 commits June 22, 2026 19:53
We will now log the version number and commit hash when starting up.
Also will give the full commit hash when doing ldk-server --version to
better help debugging things.
Co-authored-by: Leo Nash <hello@leonash.net>
Co-authored-by: Leo Nash <hello@leonash.net>

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do we want to do with docker? Had codex produce this commit below, could also read the external GIT_HASH env var

Date: Wed Jun 24 16:38:56 2026 +0000
Let Docker builds read Git metadata
Stop excluding .git from the Docker build context. The version build
scripts can then discover HEAD during image builds, matching local Cargo
builds when the source comes from a normal checkout.
Keep the existing GIT_HASH environment fallback for builds that do not
have Git metadata available. That fallback remains the last resort after
git rev-parse HEAD fails, and Cargo still reruns the build scripts when
the fallback value changes.
AI-Generated-By: OpenAI Codex
diff --git a/.dockerignore b/.dockerignore
index a4ec515..d21fbcc 100644
--- a/.dockerignore+++ b/.dockerignore@@ -1,6 +1,5 @@
target/
**/target/
-.git/
.gitignore
.github/
.claude/

The Docker build excludes .git via .dockerignore, so the build
scripts cannot derive the commit hash from git and fall back to
"unknown". Declare GIT_HASH as a build arg and export it as an env
var so the build scripts can embed it when callers pass the hash via
--build-arg.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@benthecarman

benthecarman commented Jun 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

I'd rather not include the whole git dir in the build. Made it so we can pass the env var as an arg. This way we can also do like 0.3.0 instead of a commit hash so the build looks more like an official release

@benthecarman
benthecarman merged commit 8163f4f into lightningdevkit:mainJun 24, 2026
8 checks passed
@benthecarman
benthecarman deleted the commit-hash branch June 24, 2026 20:18
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@benthecarman@ldk-reviews-bot@tankyleo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add crate version and commit hash to ldk-server - #229

Merged
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash
Jun 24, 2026
Merged

Add crate version and commit hash to ldk-server#229
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash

Conversation

@benthecarman

Copy link
Copy Markdown
Collaborator

We will now log the version number and commit hash when starting up. Also will give the full commit hash when doing ldk-server --version to better help debugging things.

Also does the same to the cli

@ldk-reviews-bot

ldk-reviews-bot commented Jun 8, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @tankyleo as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

let (shutdown_tx, shutdown_rx) = tokio::sync::watch::channel(false);

info!("Starting up...");
info!("Starting ldk-server version {FULL_VERSION}");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we also do this when we rotate the logs ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can do after #189

Comment threadldk-server/build.rs

fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-env-changed=GIT_HASH");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we make sure to update GIT_HASH if HEAD changes after the first from-clean build. Here it seems HEAD could change, and we'd ship a binary with a wrong rev ?

Or perhaps cargo install always re-runs build.rs so we might be good here.

@tankyleotankyleoJun 8, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also trying to understand how this triggers. After build.rs sets GIT_HASH, what other thing could cause GIT_HASH to change, and trigger build.rs again ?

@benthecarmanbenthecarmanJun 16, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made it so it watches the git hash file so if it changes then we recalc

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vibed with codex, pushed the suggestions in a commit, let me know what you think @benthecarman

The findings:

_ Findings
1. High: inherited GIT_HASH overrides the real repository hash in both build scripts: ldk-server/build.rs:33, ldk-server-cli/build.rs:33. Your report is correct. If the shell exports GIT_HASH, the script skips cargo:rustc-env, so env!("GIT_HASH") compiles the caller_s stale value. I reproduced:
GIT_HASH=stale-from-env cargo run -q -p ldk-server-cli -- --version -> ldk-server-cli 0.1.0 (stale-from-env), and same for ldk-server.
Suggested fix: always compute from git rev-parse HEAD when git is available, then emit cargo:rustc-env=GIT_HASH=.... Only fall back to the environment when git is unavailable, or use a package-specific override variable.
2. Medium: packed branch refs can also leave the hash stale: ldk-server/build.rs:28, ldk-server-cli/build.rs:28, ldk-server/build.rs:54. If the current branch exists only in .git/packed-refs, watch_if_exists skips .git/refs/heads/<branch>. The next commit creates that loose ref, but HEAD and
packed-refs do not change, so Cargo does not rerun the build script. I reproduced this in a throwaway clone: after an empty commit advanced HEAD from 5d6e906... to 80648b9..., ldk-server-cli --version still printed 5d6e906....
Suggested fix: print cargo:rerun-if-changed for the symbolic ref path even when it does not exist yet. I validated that Cargo then reruns when Git creates the file.
Checks run: cargo fmt --all -- --check, cargo check -p ldk-server, cargo check -p ldk-server-cli, configured cargo clippy --all-features -- -D warnings -A clippy::drop_non_drop, cargo test -p ldk-server-cli, and cargo test -p ldk-server all passed.

@tankyleo
tankyleo requested review from tankyleo and removed request for tankyleoJune 22, 2026 16:06
@benthecarman

Copy link
Copy Markdown
CollaboratorAuthor

@tankyleo thanks I like those changes. Squashed them into my commits and added you as co-author

benthecarmanand others added 2 commits June 22, 2026 19:53
We will now log the version number and commit hash when starting up.
Also will give the full commit hash when doing ldk-server --version to
better help debugging things.
Co-authored-by: Leo Nash <hello@leonash.net>
Co-authored-by: Leo Nash <hello@leonash.net>

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do we want to do with docker? Had codex produce this commit below, could also read the external GIT_HASH env var

Date: Wed Jun 24 16:38:56 2026 +0000
Let Docker builds read Git metadata
Stop excluding .git from the Docker build context. The version build
scripts can then discover HEAD during image builds, matching local Cargo
builds when the source comes from a normal checkout.
Keep the existing GIT_HASH environment fallback for builds that do not
have Git metadata available. That fallback remains the last resort after
git rev-parse HEAD fails, and Cargo still reruns the build scripts when
the fallback value changes.
AI-Generated-By: OpenAI Codex
diff --git a/.dockerignore b/.dockerignore
index a4ec515..d21fbcc 100644
--- a/.dockerignore+++ b/.dockerignore@@ -1,6 +1,5 @@
target/
**/target/
-.git/
.gitignore
.github/
.claude/

The Docker build excludes .git via .dockerignore, so the build
scripts cannot derive the commit hash from git and fall back to
"unknown". Declare GIT_HASH as a build arg and export it as an env
var so the build scripts can embed it when callers pass the hash via
--build-arg.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@benthecarman

benthecarman commented Jun 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

I'd rather not include the whole git dir in the build. Made it so we can pass the env var as an arg. This way we can also do like 0.3.0 instead of a commit hash so the build looks more like an official release

@benthecarman
benthecarman merged commit 8163f4f into lightningdevkit:mainJun 24, 2026
8 checks passed
@benthecarman
benthecarman deleted the commit-hash branch June 24, 2026 20:18
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@benthecarman@ldk-reviews-bot@tankyleo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add crate version and commit hash to ldk-server - #229

Merged
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash
Jun 24, 2026
Merged

Add crate version and commit hash to ldk-server#229
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash

Conversation

@benthecarman

Copy link
Copy Markdown
Collaborator

We will now log the version number and commit hash when starting up. Also will give the full commit hash when doing ldk-server --version to better help debugging things.

Also does the same to the cli

@ldk-reviews-bot

ldk-reviews-bot commented Jun 8, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @tankyleo as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

let (shutdown_tx, shutdown_rx) = tokio::sync::watch::channel(false);

info!("Starting up...");
info!("Starting ldk-server version {FULL_VERSION}");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we also do this when we rotate the logs ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can do after #189

Comment threadldk-server/build.rs

fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-env-changed=GIT_HASH");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we make sure to update GIT_HASH if HEAD changes after the first from-clean build. Here it seems HEAD could change, and we'd ship a binary with a wrong rev ?

Or perhaps cargo install always re-runs build.rs so we might be good here.

@tankyleotankyleoJun 8, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also trying to understand how this triggers. After build.rs sets GIT_HASH, what other thing could cause GIT_HASH to change, and trigger build.rs again ?

@benthecarmanbenthecarmanJun 16, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made it so it watches the git hash file so if it changes then we recalc

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vibed with codex, pushed the suggestions in a commit, let me know what you think @benthecarman

The findings:

_ Findings
1. High: inherited GIT_HASH overrides the real repository hash in both build scripts: ldk-server/build.rs:33, ldk-server-cli/build.rs:33. Your report is correct. If the shell exports GIT_HASH, the script skips cargo:rustc-env, so env!("GIT_HASH") compiles the caller_s stale value. I reproduced:
GIT_HASH=stale-from-env cargo run -q -p ldk-server-cli -- --version -> ldk-server-cli 0.1.0 (stale-from-env), and same for ldk-server.
Suggested fix: always compute from git rev-parse HEAD when git is available, then emit cargo:rustc-env=GIT_HASH=.... Only fall back to the environment when git is unavailable, or use a package-specific override variable.
2. Medium: packed branch refs can also leave the hash stale: ldk-server/build.rs:28, ldk-server-cli/build.rs:28, ldk-server/build.rs:54. If the current branch exists only in .git/packed-refs, watch_if_exists skips .git/refs/heads/<branch>. The next commit creates that loose ref, but HEAD and
packed-refs do not change, so Cargo does not rerun the build script. I reproduced this in a throwaway clone: after an empty commit advanced HEAD from 5d6e906... to 80648b9..., ldk-server-cli --version still printed 5d6e906....
Suggested fix: print cargo:rerun-if-changed for the symbolic ref path even when it does not exist yet. I validated that Cargo then reruns when Git creates the file.
Checks run: cargo fmt --all -- --check, cargo check -p ldk-server, cargo check -p ldk-server-cli, configured cargo clippy --all-features -- -D warnings -A clippy::drop_non_drop, cargo test -p ldk-server-cli, and cargo test -p ldk-server all passed.

@tankyleo
tankyleo requested review from tankyleo and removed request for tankyleoJune 22, 2026 16:06
@benthecarman

Copy link
Copy Markdown
CollaboratorAuthor

@tankyleo thanks I like those changes. Squashed them into my commits and added you as co-author

benthecarmanand others added 2 commits June 22, 2026 19:53
We will now log the version number and commit hash when starting up.
Also will give the full commit hash when doing ldk-server --version to
better help debugging things.
Co-authored-by: Leo Nash <hello@leonash.net>
Co-authored-by: Leo Nash <hello@leonash.net>

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do we want to do with docker? Had codex produce this commit below, could also read the external GIT_HASH env var

Date: Wed Jun 24 16:38:56 2026 +0000
Let Docker builds read Git metadata
Stop excluding .git from the Docker build context. The version build
scripts can then discover HEAD during image builds, matching local Cargo
builds when the source comes from a normal checkout.
Keep the existing GIT_HASH environment fallback for builds that do not
have Git metadata available. That fallback remains the last resort after
git rev-parse HEAD fails, and Cargo still reruns the build scripts when
the fallback value changes.
AI-Generated-By: OpenAI Codex
diff --git a/.dockerignore b/.dockerignore
index a4ec515..d21fbcc 100644
--- a/.dockerignore+++ b/.dockerignore@@ -1,6 +1,5 @@
target/
**/target/
-.git/
.gitignore
.github/
.claude/

The Docker build excludes .git via .dockerignore, so the build
scripts cannot derive the commit hash from git and fall back to
"unknown". Declare GIT_HASH as a build arg and export it as an env
var so the build scripts can embed it when callers pass the hash via
--build-arg.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@benthecarman

benthecarman commented Jun 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

I'd rather not include the whole git dir in the build. Made it so we can pass the env var as an arg. This way we can also do like 0.3.0 instead of a commit hash so the build looks more like an official release

@benthecarman
benthecarman merged commit 8163f4f into lightningdevkit:mainJun 24, 2026
8 checks passed
@benthecarman
benthecarman deleted the commit-hash branch June 24, 2026 20:18
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@benthecarman@ldk-reviews-bot@tankyleo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add crate version and commit hash to ldk-server - #229

Merged
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash
Jun 24, 2026
Merged

Add crate version and commit hash to ldk-server#229
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash

Conversation

@benthecarman

Copy link
Copy Markdown
Collaborator

We will now log the version number and commit hash when starting up. Also will give the full commit hash when doing ldk-server --version to better help debugging things.

Also does the same to the cli

@ldk-reviews-bot

ldk-reviews-bot commented Jun 8, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @tankyleo as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

let (shutdown_tx, shutdown_rx) = tokio::sync::watch::channel(false);

info!("Starting up...");
info!("Starting ldk-server version {FULL_VERSION}");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we also do this when we rotate the logs ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can do after #189

Comment threadldk-server/build.rs

fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-env-changed=GIT_HASH");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we make sure to update GIT_HASH if HEAD changes after the first from-clean build. Here it seems HEAD could change, and we'd ship a binary with a wrong rev ?

Or perhaps cargo install always re-runs build.rs so we might be good here.

@tankyleotankyleoJun 8, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also trying to understand how this triggers. After build.rs sets GIT_HASH, what other thing could cause GIT_HASH to change, and trigger build.rs again ?

@benthecarmanbenthecarmanJun 16, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made it so it watches the git hash file so if it changes then we recalc

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vibed with codex, pushed the suggestions in a commit, let me know what you think @benthecarman

The findings:

_ Findings
1. High: inherited GIT_HASH overrides the real repository hash in both build scripts: ldk-server/build.rs:33, ldk-server-cli/build.rs:33. Your report is correct. If the shell exports GIT_HASH, the script skips cargo:rustc-env, so env!("GIT_HASH") compiles the caller_s stale value. I reproduced:
GIT_HASH=stale-from-env cargo run -q -p ldk-server-cli -- --version -> ldk-server-cli 0.1.0 (stale-from-env), and same for ldk-server.
Suggested fix: always compute from git rev-parse HEAD when git is available, then emit cargo:rustc-env=GIT_HASH=.... Only fall back to the environment when git is unavailable, or use a package-specific override variable.
2. Medium: packed branch refs can also leave the hash stale: ldk-server/build.rs:28, ldk-server-cli/build.rs:28, ldk-server/build.rs:54. If the current branch exists only in .git/packed-refs, watch_if_exists skips .git/refs/heads/<branch>. The next commit creates that loose ref, but HEAD and
packed-refs do not change, so Cargo does not rerun the build script. I reproduced this in a throwaway clone: after an empty commit advanced HEAD from 5d6e906... to 80648b9..., ldk-server-cli --version still printed 5d6e906....
Suggested fix: print cargo:rerun-if-changed for the symbolic ref path even when it does not exist yet. I validated that Cargo then reruns when Git creates the file.
Checks run: cargo fmt --all -- --check, cargo check -p ldk-server, cargo check -p ldk-server-cli, configured cargo clippy --all-features -- -D warnings -A clippy::drop_non_drop, cargo test -p ldk-server-cli, and cargo test -p ldk-server all passed.

@tankyleo
tankyleo requested review from tankyleo and removed request for tankyleoJune 22, 2026 16:06
@benthecarman

Copy link
Copy Markdown
CollaboratorAuthor

@tankyleo thanks I like those changes. Squashed them into my commits and added you as co-author

benthecarmanand others added 2 commits June 22, 2026 19:53
We will now log the version number and commit hash when starting up.
Also will give the full commit hash when doing ldk-server --version to
better help debugging things.
Co-authored-by: Leo Nash <hello@leonash.net>
Co-authored-by: Leo Nash <hello@leonash.net>

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do we want to do with docker? Had codex produce this commit below, could also read the external GIT_HASH env var

Date: Wed Jun 24 16:38:56 2026 +0000
Let Docker builds read Git metadata
Stop excluding .git from the Docker build context. The version build
scripts can then discover HEAD during image builds, matching local Cargo
builds when the source comes from a normal checkout.
Keep the existing GIT_HASH environment fallback for builds that do not
have Git metadata available. That fallback remains the last resort after
git rev-parse HEAD fails, and Cargo still reruns the build scripts when
the fallback value changes.
AI-Generated-By: OpenAI Codex
diff --git a/.dockerignore b/.dockerignore
index a4ec515..d21fbcc 100644
--- a/.dockerignore+++ b/.dockerignore@@ -1,6 +1,5 @@
target/
**/target/
-.git/
.gitignore
.github/
.claude/

The Docker build excludes .git via .dockerignore, so the build
scripts cannot derive the commit hash from git and fall back to
"unknown". Declare GIT_HASH as a build arg and export it as an env
var so the build scripts can embed it when callers pass the hash via
--build-arg.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@benthecarman

benthecarman commented Jun 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

I'd rather not include the whole git dir in the build. Made it so we can pass the env var as an arg. This way we can also do like 0.3.0 instead of a commit hash so the build looks more like an official release

@benthecarman
benthecarman merged commit 8163f4f into lightningdevkit:mainJun 24, 2026
8 checks passed
@benthecarman
benthecarman deleted the commit-hash branch June 24, 2026 20:18
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@benthecarman@ldk-reviews-bot@tankyleo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add crate version and commit hash to ldk-server - #229

Merged
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash
Jun 24, 2026
Merged

Add crate version and commit hash to ldk-server#229
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash

Conversation

@benthecarman

Copy link
Copy Markdown
Collaborator

We will now log the version number and commit hash when starting up. Also will give the full commit hash when doing ldk-server --version to better help debugging things.

Also does the same to the cli

@ldk-reviews-bot

ldk-reviews-bot commented Jun 8, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @tankyleo as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

let (shutdown_tx, shutdown_rx) = tokio::sync::watch::channel(false);

info!("Starting up...");
info!("Starting ldk-server version {FULL_VERSION}");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we also do this when we rotate the logs ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can do after #189

Comment threadldk-server/build.rs

fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-env-changed=GIT_HASH");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we make sure to update GIT_HASH if HEAD changes after the first from-clean build. Here it seems HEAD could change, and we'd ship a binary with a wrong rev ?

Or perhaps cargo install always re-runs build.rs so we might be good here.

@tankyleotankyleoJun 8, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also trying to understand how this triggers. After build.rs sets GIT_HASH, what other thing could cause GIT_HASH to change, and trigger build.rs again ?

@benthecarmanbenthecarmanJun 16, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made it so it watches the git hash file so if it changes then we recalc

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vibed with codex, pushed the suggestions in a commit, let me know what you think @benthecarman

The findings:

_ Findings
1. High: inherited GIT_HASH overrides the real repository hash in both build scripts: ldk-server/build.rs:33, ldk-server-cli/build.rs:33. Your report is correct. If the shell exports GIT_HASH, the script skips cargo:rustc-env, so env!("GIT_HASH") compiles the caller_s stale value. I reproduced:
GIT_HASH=stale-from-env cargo run -q -p ldk-server-cli -- --version -> ldk-server-cli 0.1.0 (stale-from-env), and same for ldk-server.
Suggested fix: always compute from git rev-parse HEAD when git is available, then emit cargo:rustc-env=GIT_HASH=.... Only fall back to the environment when git is unavailable, or use a package-specific override variable.
2. Medium: packed branch refs can also leave the hash stale: ldk-server/build.rs:28, ldk-server-cli/build.rs:28, ldk-server/build.rs:54. If the current branch exists only in .git/packed-refs, watch_if_exists skips .git/refs/heads/<branch>. The next commit creates that loose ref, but HEAD and
packed-refs do not change, so Cargo does not rerun the build script. I reproduced this in a throwaway clone: after an empty commit advanced HEAD from 5d6e906... to 80648b9..., ldk-server-cli --version still printed 5d6e906....
Suggested fix: print cargo:rerun-if-changed for the symbolic ref path even when it does not exist yet. I validated that Cargo then reruns when Git creates the file.
Checks run: cargo fmt --all -- --check, cargo check -p ldk-server, cargo check -p ldk-server-cli, configured cargo clippy --all-features -- -D warnings -A clippy::drop_non_drop, cargo test -p ldk-server-cli, and cargo test -p ldk-server all passed.

@tankyleo
tankyleo requested review from tankyleo and removed request for tankyleoJune 22, 2026 16:06
@benthecarman

Copy link
Copy Markdown
CollaboratorAuthor

@tankyleo thanks I like those changes. Squashed them into my commits and added you as co-author

benthecarmanand others added 2 commits June 22, 2026 19:53
We will now log the version number and commit hash when starting up.
Also will give the full commit hash when doing ldk-server --version to
better help debugging things.
Co-authored-by: Leo Nash <hello@leonash.net>
Co-authored-by: Leo Nash <hello@leonash.net>

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do we want to do with docker? Had codex produce this commit below, could also read the external GIT_HASH env var

Date: Wed Jun 24 16:38:56 2026 +0000
Let Docker builds read Git metadata
Stop excluding .git from the Docker build context. The version build
scripts can then discover HEAD during image builds, matching local Cargo
builds when the source comes from a normal checkout.
Keep the existing GIT_HASH environment fallback for builds that do not
have Git metadata available. That fallback remains the last resort after
git rev-parse HEAD fails, and Cargo still reruns the build scripts when
the fallback value changes.
AI-Generated-By: OpenAI Codex
diff --git a/.dockerignore b/.dockerignore
index a4ec515..d21fbcc 100644
--- a/.dockerignore+++ b/.dockerignore@@ -1,6 +1,5 @@
target/
**/target/
-.git/
.gitignore
.github/
.claude/

The Docker build excludes .git via .dockerignore, so the build
scripts cannot derive the commit hash from git and fall back to
"unknown". Declare GIT_HASH as a build arg and export it as an env
var so the build scripts can embed it when callers pass the hash via
--build-arg.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@benthecarman

benthecarman commented Jun 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

I'd rather not include the whole git dir in the build. Made it so we can pass the env var as an arg. This way we can also do like 0.3.0 instead of a commit hash so the build looks more like an official release

@benthecarman
benthecarman merged commit 8163f4f into lightningdevkit:mainJun 24, 2026
8 checks passed
@benthecarman
benthecarman deleted the commit-hash branch June 24, 2026 20:18
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@benthecarman@ldk-reviews-bot@tankyleo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add crate version and commit hash to ldk-server - #229

Merged
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash
Jun 24, 2026
Merged

Add crate version and commit hash to ldk-server#229
benthecarman merged 3 commits into
lightningdevkit:mainfrom
benthecarman:commit-hash

Conversation

@benthecarman

Copy link
Copy Markdown
Collaborator

We will now log the version number and commit hash when starting up. Also will give the full commit hash when doing ldk-server --version to better help debugging things.

Also does the same to the cli

@ldk-reviews-bot

ldk-reviews-bot commented Jun 8, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @tankyleo as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

let (shutdown_tx, shutdown_rx) = tokio::sync::watch::channel(false);

info!("Starting up...");
info!("Starting ldk-server version {FULL_VERSION}");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we also do this when we rotate the logs ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can do after #189

Comment threadldk-server/build.rs

fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-env-changed=GIT_HASH");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we make sure to update GIT_HASH if HEAD changes after the first from-clean build. Here it seems HEAD could change, and we'd ship a binary with a wrong rev ?

Or perhaps cargo install always re-runs build.rs so we might be good here.

@tankyleotankyleoJun 8, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also trying to understand how this triggers. After build.rs sets GIT_HASH, what other thing could cause GIT_HASH to change, and trigger build.rs again ?

@benthecarmanbenthecarmanJun 16, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made it so it watches the git hash file so if it changes then we recalc

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vibed with codex, pushed the suggestions in a commit, let me know what you think @benthecarman

The findings:

_ Findings
1. High: inherited GIT_HASH overrides the real repository hash in both build scripts: ldk-server/build.rs:33, ldk-server-cli/build.rs:33. Your report is correct. If the shell exports GIT_HASH, the script skips cargo:rustc-env, so env!("GIT_HASH") compiles the caller_s stale value. I reproduced:
GIT_HASH=stale-from-env cargo run -q -p ldk-server-cli -- --version -> ldk-server-cli 0.1.0 (stale-from-env), and same for ldk-server.
Suggested fix: always compute from git rev-parse HEAD when git is available, then emit cargo:rustc-env=GIT_HASH=.... Only fall back to the environment when git is unavailable, or use a package-specific override variable.
2. Medium: packed branch refs can also leave the hash stale: ldk-server/build.rs:28, ldk-server-cli/build.rs:28, ldk-server/build.rs:54. If the current branch exists only in .git/packed-refs, watch_if_exists skips .git/refs/heads/<branch>. The next commit creates that loose ref, but HEAD and
packed-refs do not change, so Cargo does not rerun the build script. I reproduced this in a throwaway clone: after an empty commit advanced HEAD from 5d6e906... to 80648b9..., ldk-server-cli --version still printed 5d6e906....
Suggested fix: print cargo:rerun-if-changed for the symbolic ref path even when it does not exist yet. I validated that Cargo then reruns when Git creates the file.
Checks run: cargo fmt --all -- --check, cargo check -p ldk-server, cargo check -p ldk-server-cli, configured cargo clippy --all-features -- -D warnings -A clippy::drop_non_drop, cargo test -p ldk-server-cli, and cargo test -p ldk-server all passed.

@tankyleo
tankyleo requested review from tankyleo and removed request for tankyleoJune 22, 2026 16:06
@benthecarman

Copy link
Copy Markdown
CollaboratorAuthor

@tankyleo thanks I like those changes. Squashed them into my commits and added you as co-author

benthecarmanand others added 2 commits June 22, 2026 19:53
We will now log the version number and commit hash when starting up.
Also will give the full commit hash when doing ldk-server --version to
better help debugging things.
Co-authored-by: Leo Nash <hello@leonash.net>
Co-authored-by: Leo Nash <hello@leonash.net>

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do we want to do with docker? Had codex produce this commit below, could also read the external GIT_HASH env var

Date: Wed Jun 24 16:38:56 2026 +0000
Let Docker builds read Git metadata
Stop excluding .git from the Docker build context. The version build
scripts can then discover HEAD during image builds, matching local Cargo
builds when the source comes from a normal checkout.
Keep the existing GIT_HASH environment fallback for builds that do not
have Git metadata available. That fallback remains the last resort after
git rev-parse HEAD fails, and Cargo still reruns the build scripts when
the fallback value changes.
AI-Generated-By: OpenAI Codex
diff --git a/.dockerignore b/.dockerignore
index a4ec515..d21fbcc 100644
--- a/.dockerignore+++ b/.dockerignore@@ -1,6 +1,5 @@
target/
**/target/
-.git/
.gitignore
.github/
.claude/

The Docker build excludes .git via .dockerignore, so the build
scripts cannot derive the commit hash from git and fall back to
"unknown". Declare GIT_HASH as a build arg and export it as an env
var so the build scripts can embed it when callers pass the hash via
--build-arg.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@benthecarman

benthecarman commented Jun 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

I'd rather not include the whole git dir in the build. Made it so we can pass the env var as an arg. This way we can also do like 0.3.0 instead of a commit hash so the build looks more like an official release

@benthecarman
benthecarman merged commit 8163f4f into lightningdevkit:mainJun 24, 2026
8 checks passed
@benthecarman
benthecarman deleted the commit-hash branch June 24, 2026 20:18
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@benthecarman@ldk-reviews-bot@tankyleo