Skip to content

Commit 15fdb94

Browse files
committed
fix: resolve current releases without GitHub API rate limits
1 parent d99fdb0 commit 15fdb94

4 files changed

Lines changed: 20 additions & 20 deletions

File tree

‎dsh.ps1‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ $ErrorActionPreference = 'Stop'
33
if ($args.Count) { throw 'Usage: .\dsh.ps1 [-Profile name]' }
44
npm.cmd install -g @deepseek-ai/dsh@latest pnpm@latest
55
if ($LASTEXITCODE) { exit $LASTEXITCODE }
6-
$release = Invoke-RestMethod -Uri 'https://api.github.com/repos/TokenNotIncluded/dsh-lmm-provider/releases/latest'
7-
$asset = @($release.assets | Where-Object { $_.name -eq 'dsh-lmm-provider.tgz' })
8-
if ($release.draft -or $release.prerelease -or $asset.Count -ne 1) { throw 'No published DSH LMM plugin release found' }
9-
$url = [Uri]$asset[0].browser_download_url
10-
if ($url.Scheme -ne 'https' -or $url.Host -ne 'github.com' -or -not $url.IsDefaultPort -or $url.UserInfo -or $url.Query -or $url.Fragment -or $url.AbsolutePath -notmatch '^/TokenNotIncluded/dsh-lmm-provider/releases/download/[^/]+/dsh-lmm-provider\.tgz$') { throw 'Unexpected plugin release URL' }
11-
dsh.cmd plugin --profile $Profile add $url.AbsoluteUri --ignore-scripts
6+
$response = Invoke-WebRequest -UseBasicParsing -Method Head -Uri 'https://github.com/TokenNotIncluded/dsh-lmm-provider/releases/latest'
7+
$finalUri = $response.BaseResponse.ResponseUri
8+
if (-not $finalUri) { $finalUri = $response.BaseResponse.RequestMessage.RequestUri }
9+
$url = [Uri]$finalUri
10+
if (-not $url -or $url.Scheme -ne 'https' -or $url.Host -ne 'github.com' -or -not $url.IsDefaultPort -or $url.UserInfo -or $url.Query -or $url.Fragment -or $url.AbsolutePath -notmatch '^/TokenNotIncluded/dsh-lmm-provider/releases/tag/([a-zA-Z0-9][a-zA-Z0-9._-]*)$') { throw 'Unexpected plugin release URL' }
11+
$pluginUrl = 'https://github.com/TokenNotIncluded/dsh-lmm-provider/releases/download/' + $Matches[1] + '/dsh-lmm-provider.tgz'
12+
dsh.cmd plugin --profile $Profile add $pluginUrl --ignore-scripts
1213
exit $LASTEXITCODE

‎dsh.sh‎

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@ set -euo pipefail
44
npm install -g @deepseek-ai/dsh@latest pnpm@latest
55
# Resolve the current built release rather than installing an unbuilt Git checkout
66
# or a cached npm preview package. A versioned asset URL also refreshes pnpm's source.
7-
plugin_url=$(curl -fsSL https://api.github.com/repos/TokenNotIncluded/dsh-lmm-provider/releases/latest | node --input-type=module -e '
8-
let input=""; for await (const chunk of process.stdin) input+=chunk;
9-
const release=JSON.parse(input), asset=release.assets?.find(a=>a.name==="dsh-lmm-provider.tgz");
10-
if(release.draft || release.prerelease || !asset) throw Error("No published DSH LMM plugin release found");
11-
const url=new URL(asset.browser_download_url);
12-
if(url.origin!=="https://github.com" || url.username || url.password || url.search || url.hash || !/^\/TokenNotIncluded\/dsh-lmm-provider\/releases\/download\/[^/]+\/dsh-lmm-provider\.tgz$/.test(url.pathname)) throw Error("Unexpected plugin release URL");
13-
console.log(url.href);
14-
')
7+
release_url=$(curl -fsSLI -o /dev/null -w '%{url_effective}' https://github.com/TokenNotIncluded/dsh-lmm-provider/releases/latest)
8+
plugin_url=$(node --input-type=module -e '
9+
const url=new URL(process.argv[1]);
10+
const prefix="/TokenNotIncluded/dsh-lmm-provider/releases/tag/", tag=url.pathname.slice(prefix.length);
11+
if(url.origin!=="https://github.com" || url.username || url.password || url.search || url.hash || !url.pathname.startsWith(prefix) || !/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(tag)) throw Error("Unexpected plugin release URL");
12+
console.log("https://github.com/TokenNotIncluded/dsh-lmm-provider/releases/download/"+tag+"/dsh-lmm-provider.tgz");
13+
' "$release_url")
1514
dsh plugin --profile "${1:-web}" add "$plugin_url" --ignore-scripts

‎test.ps1‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@ Check 'dsh.ps1' $npmFailure 9 'npm failed'
5555
$npmSuccess = @'
5656
function npm.cmd { Write-Output ($args -join '|'); $global:LASTEXITCODE=0 }
5757
function dsh.cmd { Write-Output ($args -join '|'); $global:LASTEXITCODE=0 }
58-
function Invoke-RestMethod { param($Uri) if ($Uri -notmatch '/TokenNotIncluded/dsh-lmm-provider/releases/latest$') { throw 'wrong release URL' }; return [pscustomobject]@{assets=@([pscustomobject]@{name='dsh-lmm-provider.tgz';browser_download_url='https://github.com/TokenNotIncluded/dsh-lmm-provider/releases/download/v0.1.0-alpha.5/dsh-lmm-provider.tgz'})} }
58+
function Invoke-WebRequest { param($Uri,$Method,[switch]$UseBasicParsing) if ($Uri -ne 'https://github.com/TokenNotIncluded/dsh-lmm-provider/releases/latest' -or $Method -ne 'Head') { throw 'wrong release URL' }; return [pscustomobject]@{BaseResponse=[pscustomobject]@{ResponseUri=[Uri]'https://github.com/TokenNotIncluded/dsh-lmm-provider/releases/tag/v0.1.0-alpha.5'}} }
5959
'@
6060
Check 'dsh.ps1' $npmSuccess 0 'plugin\|--profile\|headless.*releases/download/v0.1.0-alpha.5/dsh-lmm-provider.tgz' '-Profile headless'
61-
Check 'dsh.ps1' ($npmSuccess+"`nfunction Invoke-RestMethod { [pscustomobject]@{assets=@()} }") 1 'No published DSH LMM plugin release found'
62-
Check 'dsh.ps1' ($npmSuccess+"`nfunction Invoke-RestMethod { [pscustomobject]@{assets=@([pscustomobject]@{name='dsh-lmm-provider.tgz';browser_download_url='https://evil.invalid/plugin.tgz'})} }") 1 'Unexpected plugin release URL'
61+
Check 'dsh.ps1' ($npmSuccess+"`nfunction Invoke-WebRequest { throw 'missing-release' }") 1 'missing-release'
62+
Check 'dsh.ps1' ($npmSuccess+"`nfunction Invoke-WebRequest { [pscustomobject]@{BaseResponse=[pscustomobject]@{ResponseUri=[Uri]'https://evil.invalid/plugin.tgz'}} }") 1 'Unexpected plugin release URL'
6363
$upstream = @'
6464
function Invoke-RestMethod { return 'param([string]$Version) Write-Output "upstream:$Version"' }
6565
'@

‎test.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@
3939
print('printf "%s\\n" "$@" > "$HOME/received-args"')
4040
elif url.endswith('/desktop.sh'):
4141
print(Path(os.environ['PROJECT'], 'desktop.sh').read_text())
42-
elif url == 'https://api.github.com/repos/TokenNotIncluded/dsh-lmm-provider/releases/latest':
43-
asset_url=os.environ.get('DSH_ASSET_URL','https://github.com/TokenNotIncluded/dsh-lmm-provider/releases/download/v0.1.0-alpha.5/dsh-lmm-provider.tgz')
44-
print(json.dumps({'assets': [] if os.environ.get('NO_ASSET') else [{'name':'dsh-lmm-provider.tgz','browser_download_url':asset_url}]}))
42+
elif url == 'https://github.com/TokenNotIncluded/dsh-lmm-provider/releases/latest':
43+
if os.environ.get('NO_ASSET'): sys.exit(22)
44+
print(os.environ.get('DSH_ASSET_URL','https://github.com/TokenNotIncluded/dsh-lmm-provider/releases/tag/v0.1.0-alpha.5'))
4545
elif '/releases/latest' in url:
4646
print(json.dumps({'assets': [] if os.environ.get('NO_ASSET') else [
4747
{'name': 'Tool-amd64.deb', 'browser_download_url': 'https://github.com/official/tool.deb'},

0 commit comments

Comments
 (0)