{"record":{"id":"796cdc12a97fa847","repo":"jdx/mise","slug":"packslip-plugin-sources-currently-require-a-github","errorCode":null,"errorMessage":"packslip plugin sources currently require a GitHub repository","messagePattern":"packslip plugin sources currently require a GitHub repository","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/plugins/packslip.rs","lineNumber":33,"sourceCode":"use crate::toolset::{ResolveOptions, ToolRequest, ToolSource, Toolset};\nuse crate::ui::progress_report::{QuietReport, SingleReport};\n\nconst STATE_FILE: &str = \".mise-packslip-plugin.json\";\n\n#[derive(Debug, Clone, Serialize, Deserialize)]\npub(crate) struct Source {\n    project: String,\n    request: String,\n}\n\nimpl Source {\n    pub(crate) fn parse(value: &str) -> Result<Option<Self>> {\n        let Some(value) = value.strip_prefix(\"packslip:\") else {\n            return Ok(None);\n        };\n        let (project, request) = value.split_once('#').unwrap_or((value, \"latest\"));\n        let project = project_name(project)?;\n        ensure!(\n            project.starts_with(\"github.com/\") && packslip::model::repository(&project).is_some(),\n            \"packslip plugin sources currently require a GitHub repository\"\n        );\n        ensure!(\n            !request.is_empty(),\n            \"packslip plugin version must not be empty\"\n        );\n        Ok(Some(Self {\n            project,\n            request: request.to_owned(),\n        }))\n    }\n\n    pub(crate) fn url(&self) -> String {\n        format!(\"packslip:{}#{}\", self.project, self.request)\n    }\n\n    pub(crate) fn with_version(mut self, version: Option<String>) -> Self {","sourceCodeStart":15,"sourceCodeEnd":51,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/plugins/packslip.rs#L15-L51","documentation":"Packslip source parsing (`PackslipSource::parse` in src/plugins/packslip.rs) only supports sources of the form `packslip:github.com/owner/repo[#version]` where the project is a GitHub repository known to the packslip model. If the string after `packslip:` is not a `github.com/...` path or is not a recognized repository, parsing fails with this message.","triggerScenarios":"A tool source string like `packslip:mytool`, `packslip:gitlab.com/owner/repo`, `packslip:github.com/owner/nonexistent`, or a typo'd/renamed repo passed via `mise use packslip:...`, a mise.toml `[tools]` entry, or the registry.","commonSituations":"Typing a bare tool name instead of the full github.com path; pointing at a repo that does not publish signed packslip manifests; vendor renamed/transferred the repository; confusing packslip with aqua/github source prefixes.","solutions":["Use the full GitHub repository path: `mise use packslip:github.com/owner/repo`.","Verify the repository actually publishes packslip release manifests (`mise ls-remote packslip:github.com/owner/repo`); if not, use `mise use github:owner/repo` or `aqua:owner/repo` instead.","Check for typos or org/rename changes in the repository path."],"exampleFix":"// before\n[tools]\nmytool = \"packslip:mytool\"\n\n// after\n[tools]\nmytool = \"packslip:github.com/owner/mytool\"","handlingStrategy":"validation","validationCode":"// validate before writing the spec\ncase \"$src\" in\n  packslip:github.com/*/*) mise ls-remote \"$src\" >/dev/null || echo \"unknown packslip repo: $src\" ;;\n  packslip:*) echo \"packslip sources must be github.com/owner/repo: $src\"; exit 1 ;;\nesac","typeGuard":"fn is_packslip_github_repo(src: &str) -> bool {\n    src.strip_prefix(\"packslip:\")\n        .map(|p| p.starts_with(\"github.com/\") && !p.starts_with(\"github.com//\"))\n        .unwrap_or(false)\n}","tryCatchPattern":null,"preventionTips":["Always use the full `packslip:github.com/owner/repo` form in tool configs.","Run `mise ls-remote` on the source before pinning it in mise.toml.","Remember packslip only covers repos publishing signed release manifests; use github:/aqua: for others."],"tags":["packslip","plugin","config","invalid-source"],"backgroundTag":"invalid-url-format","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}