Suporte Purl – Comunidade de Dev
Esta é a Parte 4 da série SBOM de postagens de blog enquanto trabalha no SBOM :: CyclonedX, um dos campos chamou minha atenção: Purl. Inicialmente, pensei: “O que isso tem a ver com a língua irmã”? Rapidamente ficou claro que se tratava de um URL de embalagem. Mais profundo no buraco do coelho do ReadMe: Um URL de Purl ou Pacote é uma tentativa de padronizar as abordagens existentes para identificar e localizar de maneira confiável pacotes de software. Um Purl é uma sequência de URL usada para identificar e localizar um pacote de software em uma maneira mais universa Sintaxe e convenções expressivas baseadas em URLs familiares. E a lista de adotantes já é bastante impressionante. Mas, como ainda não havia suporte para Purls em Raku, isso também significava suporte para ele precisava ser criado. Decidi escrever o suporte, o que também era uma tarefa e tanto. Um módulo PURL, já que eu queria que o SBOM :: Cyclonedx pudesse suportar toda a funcionalidade da definição CyclonedX 1.6, não tinha escolha a não ser implementar toda a especificação PURL (e seus tipos suportados) também. A vida pode ser difícil quando você está se divertindo! No momento da redação deste artigo, a especificação PURL reconhece 31 tipos, cada um com suas regras para lidar e interpretar sua especificação de pacote nativo em um URL de embalagem. Felizmente, foi fornecido um conjunto de teste bastante grande para todos os tipos registrados. Que mudou no formato no meio da implementação, mas é isso que você recebe quando está na borda do desenvolvimento dos desenvolvimentos. Então lá estava: suporte purl para raku. O que permitiu que o subconjunto PURL do SBOM :: CyclonedX obtenha validação. Pois o que o SBOM jogou nele. Adicionar suporte para distribuições de módulos RAKU, mas a implementação de tudo isso não foi realmente útil para as próprias distribuições de módulos RAKU. Porque não houve suporte para Raku definido na própria especificação PURL. Eu decidi passar. O que foi bem fácil, no início: Tipo: “Raku” (isso foi fácil) espaço para nome: essa seria a “autenticação” de uma distribuição de módulos Raku, por exemplo, “Zef: Raku-Community-Modules” Nome: que seria o nome da versão “2.4 “, por exemplo, o pacote de Base64”: essa seria a versão, G “2.4.2.4 “, por exemplo, a versão: MIME :: base64: ver<1.2.4>: Auth Digite o modo de saída do modo de tela cheia seria PKG: RAKU/ZEF: RAKU-COMMUNITY-MODULES/MIME :: base6@1.2.4 Digite o modo de saída de tela cheia da tela cheia como URL de embalagem. Fácil o suficiente, certo? Adicionando “Raku” ao padrão URL da embalagem, mas isso não foi suficiente, é claro: para tornar “Raku” aceitável como um tipo de URL de embalagem, algum trabalho precisava ser feito. E esse trabalho foi realizado na linguagem de programação “Adicionar Raku como tipo de especificação PURL”. E espera-se que minha solicitação de tração (com especificação, documentação e testes) para o projeto Package-URL seja mesclada em breve. Requisitos versus dependências, é claro, sempre há um problema. Se você olhar para o arquivo meta6.json de uma distribuição do módulo Raku que precisa de outros módulos a serem instalados, você geralmente está olhando para um “requisito”. Por exemplo, olhando para o meta6.json of Identity :: utils: “depende”: {“runtime”: {“requer”: [
“String::Utils:ver<0.0.35+>:auth”
]
}}, Digite o modo de tela cheia de tela cheia de tela cheia Observe o + em “0.0.35+”. Esta é a maneira de Raku indicar: “Qualquer versão superior ou igual a 0,0.35 será aceitável”. Essa string de identidade não indica uma dependência, porque não fixa a versão real que será usada em tempo de execução. Então, como isso se traduziria em um purl? use purl; Diga Purl.From-Identity (“String :: Utils: Ver<0.0.35+>: auth “); # pkg: raku/zef: lizmat/string :: utils? vers = vers: raku/%3e = 0.0.35 Digite o modo de tela cheia de tela cheia que não se parece com” pkg: raku/zef: lizmat/string :: utils@0.0.35 “! Ranta especificadora de versão.
Fonte
Publicar comentário