Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Verify submodule metadata
run: git submodule status --recursive

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Submodule check accepts an unfetched grammar

actions/checkout still performs its default checkout without initializing submodules, while git submodule status --recursive only reports an uninitialized gitlink with a leading - and exits successfully. Consequently, this job passes when the Containerfile grammar directory, including any nested submodules, has not been fetched. Initialize submodules recursively during checkout and/or explicitly reject minus-prefixed status entries.

Artifacts

Isolated Git submodule reproduction source

  • Authored and executed Bash source creates a parent repository and gitlink, clones it without submodule initialization, and captures before and after behavior; it provides the exact reproduction method.

Uninitialized submodule status succeeds

  • Captured command output from the normal clone shows the gitlink is registered, its directory is absent, and recursive status exits 0 with a minus-prefixed SHA; the check does not enforce availability.

Initialized submodule status succeeds

  • Captured command output after recursive initialization shows Git cloned the child and reports a space-prefixed initialized SHA; initialization is a distinct required action.

Reproduction execution result

  • Captured execution header records the authored isolated reproduction command, repository working directory, and successful exit status; the reproduction ran successfully.

Artifact presence check

  • Captured verification confirms the authored reproducer and both executed before-and-after captures are nonempty in the required artifact directory; the proof files are present.

View artifacts

T-Rex Ran code and verified through T-Rex

Fix in Codex Fix in Claude Code

- uses: ./.github/actions/shellcheck-wasm
- name: Set up Go
uses: actions/setup-go@v7
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "_integrations/zed-tally/grammars/dockerfile"]
path = _integrations/zed-tally/grammars/dockerfile
url = https://github.com/wharflab/tree-sitter-containerfile.git
6 changes: 3 additions & 3 deletions _integrations/zed-tally/extension.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ repository = "https://github.com/wharflab/tally"
schema_version = 1
version = "0.1.0"

[grammars.dockerfile]
commit = "971acdd908568b4531b0ba28a445bf0bb720aba5"
repository = "https://github.com/camdencheek/tree-sitter-dockerfile"
[grammars.containerfile]
commit = "49ad7af2aefffc5ac226995a8bea754f06ef7901"
repository = "https://github.com/wharflab/tree-sitter-containerfile"

[language_servers.tally]
code_actions_kind = ["quickfix", "source.fixAll.tally"]
Expand Down
2 changes: 1 addition & 1 deletion _integrations/zed-tally/grammars/dockerfile
2 changes: 1 addition & 1 deletion _integrations/zed-tally/languages/dockerfile/config.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name = "Dockerfile"
grammar = "dockerfile"
grammar = "containerfile"
path_suffixes = ["Dockerfile", "Containerfile", "dockerfile"]
line_comments = ["# "]
brackets = [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
; Dockerfile instructions set taken from:
; https://docs.docker.com/engine/reference/builder/#overview
; https://github.com/camdencheek/tree-sitter-dockerfile/blob/main/queries/highlights.scm
; https://github.com/wharflab/tree-sitter-containerfile/blob/main/queries/highlights.scm
[
"FROM"
"AS"
Expand Down
13 changes: 13 additions & 0 deletions scripts/release/publish_vsix.sh
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,18 @@ esac

already_published_pattern='already published|already exists'
transient_pattern='RequestBlockedException|resource .Concurrency.|exceeding usage|rate.?limit|too many requests|HTTP (408|409|425|429|5[0-9][0-9])|ECONNRESET|ETIMEDOUT|EAI_AGAIN|socket hang up|temporary unavailable|temporarily unavailable|service unavailable|gateway timeout'
persistent_vsid_pattern='resource .Concurrency. in namespace .VSID.'

report_persistent_vsid_block() {
local output_file="$1"
if [[ "$registry" != "vscode" ]] || ! grep -Eqi "$persistent_vsid_pattern" "$output_file"; then
return
fi

echo "::error::Visual Studio Marketplace is persistently blocking the publisher identity with VSID Concurrency."
echo "::error::Stop automated retries and contact VSMarketplace@microsoft.com to clear the publisher/account block."
echo "Include publisher 'wharflab', extension 'wharflab.tally', event ID 3000, and the failed workflow URL."
}

publish_one() {
local vsix="$1"
Expand Down Expand Up @@ -95,6 +107,7 @@ for index in "${!vsixes[@]}"; do
fi

if (( attempt >= max_attempts )) || ! grep -Eqi "$transient_pattern" "$output_file"; then
report_persistent_vsid_block "$output_file"
rm -f "$output_file"
exit "$status"
fi
Expand Down
Loading