@smbcloud / cli / commits / 8251e59

cleanup

Seto Elkahfi committed Apr 6, 2026 at 16:48 UTC 8251e5951d15c8c3f1f3bd1919c1f8df637c0444
7 files changed +19 -52
.agents/skills/ci-cd/SKILL.md
+14
@@ -622,6 +622,20 @@ When the main `README.MD` changes its tagline, logo URL, quick start commands, o
622 **Platform support table missing new targets**
623 When a new platform is added to any release matrix (e.g. `linux-arm64`), update the platform support table in `npm/smbcloud-cli/README.md` and `pypi/README.md` in the same PR.
624
625 +**Use workflow-level `env:` for compile-time secrets, not `$GITHUB_ENV` export steps**
626 +Compile-time secrets like `CLI_CLIENT_SECRET` (read by `env!()`) must be available to every `cargo` invocation across all platforms — including maturin-action's internal Docker containers (manylinux) and Windows subprocesses. Writing to `$GITHUB_ENV` in a separate step is unreliable: it does not propagate into Docker containers, and on Windows runners the default PowerShell shell does not expand `"$GITHUB_ENV"` correctly.
627 +
628 +The correct approach is to declare the secret in the workflow-level `env:` block, which GitHub Actions propagates to all jobs, all steps, and all subprocesses automatically:
629 +
630 +```yaml
631 +env:
632 + CLI_CLIENT_SECRET: ${{ secrets.CLI_CLIENT_SECRET }}
633 + CARGO_TERM_COLOR: always
634 + # ... other env vars
635 +```
636 +
637 +Never add a dedicated "Export build secret" step for this purpose. One line in `env:` replaces it entirely and works on Linux (including Docker), macOS, and Windows without any shell workarounds.
638 +
639 **PyPI blocks short and protocol-reserved package names**
640 PyPI maintains a blocklist of names that are too generic or conflict with well-known protocols and tools. `smb` is blocked because it is the name of the Windows SMB/CIFS file sharing protocol. Attempting to publish a package named `smb` returns `400 The name 'smb' isn't allowed`. There is no workaround — the name cannot be registered regardless of who owns it. If you need `uvx <name>` to work without `--from`, the package name and binary name must match AND the package name must not be on the blocklist. For this repo, `uvx --from smbcloud-cli smb` is the correct form.
641
.github/workflows/ci.yml
+1 -11
@@ -5,14 +5,7 @@ name: Tests
5 on: push
6
7 env:
8 - SMB_CLIENT_ID: ${{ secrets.SMB_CLIENT_ID }}
9 - SMB_CLIENT_SECRET: ${{ secrets.SMB_CLIENT_SECRET }}
10 - SMB_API_HOST: ${{ secrets.SMB_API_HOST }}
11 - SMB_API_PROTOCOL: ${{ secrets.SMB_API_PROTOCOL }}
12 - GH_OAUTH_CLIENT_ID: ${{ secrets.GH_OAUTH_CLIENT_ID }}
13 - GH_OAUTH_CLIENT_SECRET: ${{ secrets.GH_OAUTH_CLIENT_SECRET }}
14 - GH_OAUTH_REDIRECT_HOST: ${{ secrets.GH_OAUTH_REDIRECT_HOST }}
15 - GH_OAUTH_REDIRECT_PORT: ${{ secrets.GH_OAUTH_REDIRECT_PORT }}
8 + CLI_CLIENT_SECRET: ${{ secrets.CLI_CLIENT_SECRET }}
9
10 jobs:
11 test_branch:
@@ -21,7 +14,4 @@ jobs:
14 - uses: actions/checkout@v6
15 - uses: dtolnay/rust-toolchain@stable
16
24 - - name: Export build secret
25 - run: echo "CLI_CLIENT_SECRET=${{ secrets.CLI_CLIENT_SECRET }}" >> "$GITHUB_ENV"
26 -
17 - run: cargo test --all-features
.github/workflows/release-crate.yml
+1 -11
@@ -15,14 +15,7 @@ permissions:
15
16 env:
17 CARGO_TERM_COLOR: always
18 - SMB_CLIENT_ID: ${{ secrets.SMB_CLIENT_ID }}
19 - SMB_CLIENT_SECRET: ${{ secrets.SMB_CLIENT_SECRET }}
20 - SMB_API_HOST: ${{ secrets.SMB_API_HOST }}
21 - SMB_API_PROTOCOL: ${{ secrets.SMB_API_PROTOCOL }}
22 - GH_OAUTH_CLIENT_ID: ${{ secrets.GH_OAUTH_CLIENT_ID }}
23 - GH_OAUTH_CLIENT_SECRET: ${{ secrets.GH_OAUTH_CLIENT_SECRET }}
24 - GH_OAUTH_REDIRECT_HOST: ${{ secrets.GH_OAUTH_REDIRECT_HOST }}
25 - GH_OAUTH_REDIRECT_PORT: ${{ secrets.GH_OAUTH_REDIRECT_PORT }}
18 + CLI_CLIENT_SECRET: ${{ secrets.CLI_CLIENT_SECRET }}
19
20 jobs:
21 publish:
@@ -68,9 +61,6 @@ jobs:
61 with:
62 key: publish
63
71 - - name: Export build secret
72 - run: echo "CLI_CLIENT_SECRET=${{ secrets.CLI_CLIENT_SECRET }}" >> "$GITHUB_ENV"
73 -
64 - name: Verify Cargo.toml version matches tag
65 shell: bash
66 run: |
.github/workflows/release-github.yml
+1 -3
@@ -17,6 +17,7 @@ permissions:
17 env:
18 PROJECT_NAME: smb
19 CARGO_TERM_COLOR: always
20 + CLI_CLIENT_SECRET: ${{ secrets.CLI_CLIENT_SECRET }}
21
22 jobs:
23 build:
@@ -86,9 +87,6 @@ jobs:
87 with:
88 key: github-${{ matrix.target }}
89
89 - - name: Export build secrets
90 - run: echo "CLI_CLIENT_SECRET=${{ secrets.CLI_CLIENT_SECRET }}" >> "$GITHUB_ENV"
91 -
90 - name: Build binary
91 shell: bash
92 run: cargo build --locked --release --target ${{ matrix.target }} --package smbcloud-cli
.github/workflows/release-npm.yml
+1 -11
@@ -15,14 +15,7 @@ permissions:
15 contents: read
16
17 env:
18 - SMB_CLIENT_ID: ${{ secrets.SMB_CLIENT_ID }}
19 - SMB_CLIENT_SECRET: ${{ secrets.SMB_CLIENT_SECRET }}
20 - SMB_API_HOST: ${{ secrets.SMB_API_HOST }}
21 - SMB_API_PROTOCOL: ${{ secrets.SMB_API_PROTOCOL }}
22 - GH_OAUTH_CLIENT_ID: ${{ secrets.GH_OAUTH_CLIENT_ID }}
23 - GH_OAUTH_CLIENT_SECRET: ${{ secrets.GH_OAUTH_CLIENT_SECRET }}
24 - GH_OAUTH_REDIRECT_HOST: ${{ secrets.GH_OAUTH_REDIRECT_HOST }}
25 - GH_OAUTH_REDIRECT_PORT: ${{ secrets.GH_OAUTH_REDIRECT_PORT }}
18 + CLI_CLIENT_SECRET: ${{ secrets.CLI_CLIENT_SECRET }}
19
20 jobs:
21 publish-npm-binaries:
@@ -102,9 +95,6 @@ jobs:
95 rustup target add ${{ matrix.build.TARGET }} --toolchain ${{ env.RUST_TOOLCHAIN }}
96 rustup target list --installed
97
105 - - name: Export build secret
106 - run: echo "CLI_CLIENT_SECRET=${{ secrets.CLI_CLIENT_SECRET }}" >> "$GITHUB_ENV"
107 -
98 - name: Build
99 env:
100 GH_OAUTH_CLIENT_ID: ${{ secrets.GH_OAUTH_CLIENT_ID }}
.github/workflows/release-pypi.yml
+1 -14
@@ -12,14 +12,7 @@ permissions:
12
13 env:
14 CARGO_TERM_COLOR: always
15 - SMB_CLIENT_ID: ${{ secrets.SMB_CLIENT_ID }}
16 - SMB_CLIENT_SECRET: ${{ secrets.SMB_CLIENT_SECRET }}
17 - SMB_API_HOST: ${{ secrets.SMB_API_HOST }}
18 - SMB_API_PROTOCOL: ${{ secrets.SMB_API_PROTOCOL }}
19 - GH_OAUTH_CLIENT_ID: ${{ secrets.GH_OAUTH_CLIENT_ID }}
20 - GH_OAUTH_CLIENT_SECRET: ${{ secrets.GH_OAUTH_CLIENT_SECRET }}
21 - GH_OAUTH_REDIRECT_HOST: ${{ secrets.GH_OAUTH_REDIRECT_HOST }}
22 - GH_OAUTH_REDIRECT_PORT: ${{ secrets.GH_OAUTH_REDIRECT_PORT }}
15 + CLI_CLIENT_SECRET: ${{ secrets.CLI_CLIENT_SECRET }}
16
17 jobs:
18 build-wheels:
@@ -97,9 +90,6 @@ jobs:
90 rustup target add ${{ matrix.build.TARGET }} --toolchain ${{ env.RUST_TOOLCHAIN }}
91 rustup target list --installed
92
100 - - name: Export build secret
101 - run: echo "CLI_CLIENT_SECRET=${{ secrets.CLI_CLIENT_SECRET }}" >> "$GITHUB_ENV"
102 -
93 - name: Build wheel
94 uses: PyO3/maturin-action@v1
95 with:
@@ -152,9 +142,6 @@ jobs:
142 with:
143 toolchain: ${{ env.RUST_TOOLCHAIN }}
144
155 - - name: Export build secret
156 - run: echo "CLI_CLIENT_SECRET=${{ secrets.CLI_CLIENT_SECRET }}" >> "$GITHUB_ENV"
157 -
145 - name: Build sdist
146 uses: PyO3/maturin-action@v1
147 with:
crates/smbcloud-networking/src/constants.rs
-2
@@ -6,8 +6,6 @@ pub const GH_OAUTH_CLIENT_ID: &str = "bf1f12d97659a6495e43";
6 pub const GH_OAUTH_REDIRECT_HOST: &str = "http://localhost";
7 pub const GH_OAUTH_REDIRECT_PORT: &str = "8808";
8
9 -pub const SMB_CLIENT_ID: &str = "cli";
10 -pub const SMB_CLIENT_SECRET: &str = "secretttttttt";
9 pub const SMB_USER_AGENT: &str = "smbcloud-cli";
10
11 // Paths