Salta ai contenuti
getnextpdf.com

Enterprise edizione

Release — Riferimento approfondito

Il namespace NextPDF\Enterprise\Release modella una release di prodotto come oggetti valore immutabili e tipizzati. La sua superficie pubblica è composta da sette classi final e cinque enum con backing di tipo stringa. ReleaseManifest aggrega le voci ArtifactManifest per-artefatto più i percorsi delle prove di supply chain. BuildProfile è l’unica fonte di verità per una variante di artefatto. ArtifactNamer e PackageMapping derivano nomi di file deterministici e l’identità del pacchetto Composer da un profilo. PublishingPlan::fromProfiles risolve ogni profilo in voci PublishingTarget tipizzate con il canale e il confine di accesso corretti. ReleaseStatus tipizza il ciclo di vita della release. Il modulo non esegue I/O, chiamate di rete né crittografia; è pura modellazione di metadati.

Questa capacità è distribuita in NextPDF Enterprise (nextpdf/enterprise) e si attiva con un envelope di licenza di livello Enterprise. Un deployment privo di tale entitlement non carica le classi della capacità. Confronta le edizioni e ottieni una licenza.

Questa superficie è licenziata dal confine del pacchetto nextpdf/enterprise e non ha un codice di capacità per-funzionalità separato. Core e Pro non includono uno strato di modellazione delle release.

Terminal window
composer require nextpdf/enterprise:^3
SimboloParametriComportamento predefinitoRestituisceSolleva o fallisce conNote
ReleaseManifest::__constructversion, sourceCommit, builtAt, artifacts = [], sbomPath = null, gpgSignature = null, checksumPath = nullCostruisce il documento di release immutabile di primo livelloistanzafinal readonly; SCHEMA_VERSION è '1.0'; minor per campi additivi, major per incompatibili; since 3.0.0
ReleaseManifest::createWithDefaultsstring $version, string $sourceCommit, DateTimeImmutable $builtAt, array $artifacts = []Precollega i nomi di file predefiniti di SBOM, firma e checksum tramite ArtifactNamerselfPunto di ingresso canonico per i builder di release; usare il costruttore per sovrascrivere singoli percorsi
ReleaseManifest::toArray / ::toJsonnessunoSerializza il manifest con tutte le voci degli artefattiarray / stringa JSONtoJson: JsonException in caso di errore di codificaFormattato leggibile, slash non-escapati; built_at in formato ATOM
ReleaseManifest::validatenessunoVerifica che l’elenco degli artefatti non sia vuoto e che ogni artefatto corrisponda a versione e commit della releaselist<string> di errori; vuoto significa validoNon solleva maiI chiamanti devono trattare un elenco non vuoto come un difetto
ArtifactManifest::__constructfilename, version, sourceCommit, edition, deliveryMode, encodingTechnology, channel, phpTarget, sha256, ioncubeExpire, builtAtRegistra un artefatto costruito: cosa è stato costruito, come, e come verificarloistanzafinal readonly; ioncubeExpire è null per gli artefatti senza scadenza
ArtifactManifest::fromProfileBuildProfile $profile, string $version, string $sourceCommit, string $sha256, ?DateTimeImmutable $builtAt = nullDeriva il nome di file e tutte le dimensioni del profiloselfbuiltAt assume come predefinito l’ora corrente
ArtifactManifest::toArraynessunoSerializza per la codifica JSONarray<string, string|null>I campi enum si serializzano nei rispettivi valori stringa di backing
BuildProfile::__construct / ::fromArraycampi del profilo / array $dataDefinisce una variante di artefatto; l’unica fonte di verità per naming, manifest e pianoistanza / selffromArray: InvalidArgumentException su un campo obbligatorio mancante o vuotoChiavi obbligatorie: name, edition, delivery, encoding_technology, channel, php_target
BuildProfile::requiresEncoding / ::isEvaluationnessunoHelper predicato sulle dimensioni del profiloboolLa codifica richiede insieme DeliveryMode::Encoded ed EncodingTechnology::IonCube
ArtifactNamer::formatBuildProfile $profile, string $versionEmette nextpdf-{edition}-{delivery}-{channel}-php{target}-{version}.zipnon-empty-stringDeterministico; i punti vengono rimossi dalla versione PHP di destinazione (8.4 diventa php84)
ArtifactNamer::checksumFile / ::signatureFile / ::sbomFile / ::manifestFilestring $version (manifestFile: nessuno)Emette SHA256SUMS-{v}.txt, SHA256SUMS-{v}.txt.asc, sbom-{v}.cdx.json, release-manifest.jsonnon-empty-stringIl nome di file dell’SBOM corrisponde al documento CycloneDX scritto dal generatore SBOM di Core
PackageMapping::packageName / ::resolvePackageNameBuildProfile / LicenseEdition + LicenseChannelMappa a nextpdf/pro o nextpdf/enterprise; il canale evaluation aggiunge -evaluationnon-empty-stringInvalidArgumentException su un’edizione sconosciutaIl namespace evaluation separato previene la confusione con gli artefatti paid
PackageMapping::distUrlPatternBuildProfile $profile, string $versionRisolve l’URL di download dell’artefatto sul repository canonico degli artefattinon-empty-stringEncoded e cleartext condividono un nome di pacchetto; i loro URL dist differiscono
PackageMapping::accessBoundary / ::artifactOrigin / ::consumptionChannel / ::allPackageNamesBuildProfile / nessuno / nessuno / nessunoIl confine segue il canale della licenza; canali di origine e consumo fissi; tutti i nomi di pacchetto rivolti al clienteAccessBoundary / DistributionChannel / DistributionChannel / list<non-empty-string>Core non è un pacchetto premium ed è escluso dall’elenco dei nomi
PublishingPlan::fromProfilesarray $profiles, string $version, PublishingEnvironment $environment = StagingRisolve due destinazioni per profilo: un’origine dell’artefatto, uno strato di consumoselfL’ambiente assume come predefinito Staging; la produzione è sempre una scelta esplicita
PublishingPlan::targetsByBoundary / ::targetsByChannel / ::packageNamesAccessBoundary / DistributionChannel / nessunoHelper di filtro ed enumerazione sulle destinazioni risoltelist<PublishingTarget> / list<PublishingTarget> / list<non-empty-string>packageNames è ordinato e deduplicato
PublishingPlan::validatenessunoVerifica che le destinazioni non siano vuote, che le versioni corrispondano al piano e che nessun pacchetto evaluation si trovi in un confine paidlist<string> di errori; vuoto significa validoNon solleva maiEseguire prima di qualsiasi passo di caricamento
PublishingPlan::toArraynessunoSerializza per output dry-run e loggingarray<string, mixed>Include target_count e l’elenco dei pacchetti
PublishingTarget::fromProfileBuildProfile $profile, string $version, PublishingEnvironment $environment, DistributionChannel $channelRisolve il nome del pacchetto, il confine di accesso e il nome di file dell’artefatto per un canaleselffinal readonly; toArray serializza per il logging
AccessBoundaryenum: Paid, Evaluation, InternalisCustomerFacing è true solo per Paid ed Evaluationvalori di backing 'paid', 'evaluation', 'internal'requiresAuthentication restituisce true per ogni confine
DistributionChannelenum: GitHubReleases, PrivatePackagist, DirectDownloadisArtifactOrigin e isConsumptionLayer separano i due ruolivalori di backing 'github_releases', 'private_packagist', 'direct_download'DirectDownload è riservato a un futuro canale con URL firmato
EncodingTechnologyenum: IonCube, NoneNomina lo strumento di codifica, distinto dalla forma di consegnavalori di backing 'ioncube', 'none'Un artefatto in chiaro riporta sempre None
PublishingEnvironmentenum: Staging, ProductionisCustomerFacing è true solo per Productionvalori di backing 'staging', 'production'Staging è una destinazione di verifica interna
ReleaseStatusenum: Built, Audited, Staged, Published, Revoked, SupersededcanPromote, nextStatus, isCustomerVisible, isTerminal tipizzano il ciclo di vitanextStatus restituisce ?selfCatena di promozione Built → Audited → Staged → Published; Revoked e Superseded sono terminali

Firme dei punti di ingresso, letterali dal sorgente:

public static function createWithDefaults(string $version, string $sourceCommit, DateTimeImmutable $builtAt, array $artifacts = []): self
public static function fromProfile(BuildProfile $profile, string $version, string $sourceCommit, string $sha256, ?DateTimeImmutable $builtAt = null): self
public static function fromArray(array $data): self
public static function format(BuildProfile $profile, string $version): string
public static function fromProfiles(array $profiles, string $version, PublishingEnvironment $environment = PublishingEnvironment::Staging): self
public static function fromProfile(BuildProfile $profile, string $version, PublishingEnvironment $environment, DistributionChannel $channel): self
  • Ogni classe è final; ogni classe valore è readonly. La costruzione fissa tutto lo stato. Il modulo non esegue operazioni su filesystem, di rete o crittografiche.
  • ReleaseManifest è il documento immutabile di primo livello per una versione: versione semantica, commit di origine, timestamp di build, elenco degli artefatti e percorsi facoltativi delle prove di supply chain (SBOM, firma GPG, checksum). La versione del suo schema è minor-per-additivo e major-per-incompatibile.
  • BuildProfile è l’unica fonte di verità per ciò che un artefatto contiene e per come è impacchettato. Naming, manifest e piano derivano tutti dal profilo; non esiste una fonte di configurazione secondaria.
  • EncodingTechnology nomina lo strumento di codifica; DeliveryMode (dal modulo Licensing) nomina la forma consegnata. I due sono deliberatamente separati e un artefatto in chiaro riporta sempre EncodingTechnology::None.
  • DistributionChannel separa un’origine dell’artefatto (archiviazione binaria; la destinazione di caricamento) da uno strato di consumo del pacchetto (il registry che un composer require legge). L’origine archivia il binario; lo strato di consumo serve i metadati che vi puntano.
  • AccessBoundary enumera Paid, Evaluation e Internal. Ogni confine richiede autenticazione. Gli artefatti Internal servono CI, QA e staging e non sono mai rivolti al cliente.
  • PublishingPlan::fromProfiles risolve ogni profilo in esattamente due destinazioni: una destinazione di origine dell’artefatto e una destinazione dello strato di consumo, con il confine di accesso derivato dal canale di licenza del profilo, così che gli artefatti paid ed evaluation vengano instradati correttamente.
  • Il piano è descrittivo delle destinazioni previste, non del trasporto. Il caricamento effettivo è eseguito dal tooling di release circostante e il manifest registra — ma non produce esso stesso — le prove di supply chain.
  • ReleaseStatus tipizza il ciclo di vita: Built → Audited → Staged → Published, con Revoked e Superseded come uscite terminali da Published. Solo Published è visibile al cliente; canPromote è false da Published in poi.
  • ReleaseManifest::validate e PublishingPlan::validate riportano gli errori di coerenza come elenchi di stringhe e non sollevano mai. Un elenco vuoto è l’unico esito valido.
  • BuildProfile::fromArray con un campo obbligatorio mancante, non-stringa o vuoto: InvalidArgumentException che nomina il campo.
  • BuildProfile::fromArray con un ioncube_expire vuoto o non-stringa: normalizzato a null (senza scadenza). Le voci non-stringa o vuote in encode_paths ed exclude_paths vengono scartate silenziosamente.
  • PackageMapping::resolvePackageName con un’edizione al di fuori della mappa nota: InvalidArgumentException.
  • ReleaseManifest::toJson su dati non codificabili: JsonException. La serializzazione usa JSON_THROW_ON_ERROR; non esiste alcun fallback silenzioso.
  • ReleaseManifest::validate riporta come errori un elenco di artefatti vuoto e qualsiasi artefatto la cui versione o commit di origine differisca dalla release.
  • PublishingPlan::validate riporta un elenco di destinazioni vuoto, qualsiasi versione di destinazione divergente dal piano e qualsiasi pacchetto evaluation risolto in un confine paid.
  • ReleaseStatus::nextStatus restituisce null da Published, Revoked e Superseded. I chiamanti devono gestire null; non esiste wrap-around.
  • I canali di origine e dello strato di consumo sono distinti; non puntare un composer require all’origine dell’artefatto.
  • Gli artefatti del confine Internal non sono mai rivolti al cliente; instradarli verso un canale cliente è un errore di modellazione esplicito.
  • Questo modulo non esegue operazioni crittografiche. La firma GPG e la generazione dei checksum sono esterne e qui solo riferite.

Non si rivendica alcuna conformità a standard per questo modulo; è uno strato di modellazione delle release e NextPDF non detiene alcuna certificazione. Il nome di file predefinito dell’SBOM (sbom-{version}.cdx.json) corrisponde al documento CycloneDX scritto dal generatore SBOM di Core; il manifest riferisce quella prova e non la convalida. Le firme GPG e i checksum sono prodotti e verificati dalla pipeline di release circostante. Registrare un percorso di prova è una capacità, non un’attestazione: un manifest non è una prova di per sé, non attesta la provenienza, non certifica una release e non costituisce consulenza legale.

  • Preferire ReleaseManifest::createWithDefaults così che i nomi di file delle prove concordino sempre con ArtifactNamer. Riservare il costruttore grezzo a sovrascritture per-percorso deliberate.
  • Eseguire entrambi i gate validate() in CI prima di qualsiasi passo di pubblicazione e far fallire la pipeline in caso di elenco di errori non vuoto.
  • PublishingPlan::fromProfiles assume come predefinito PublishingEnvironment::Staging. Passare Production esplicitamente; nulla in questo modulo promuove un ambiente implicitamente.
  • I manifest serializzati portano valori di backing degli enum (paid, encoded, ioncube e così via) e timestamp ATOM; trattare quelle stringhe come il contratto di trasmissione.
  • Gli artefatti evaluation risiedono in un namespace di pacchetto separato (suffisso -evaluation). Mantenere distinti i registry paid ed evaluation nella configurazione Composer.
  • L’instradamento per-canale, le credenziali e l’archiviazione sono responsabilità dell’operatore. Il piano indica al tooling dove appartiene un artefatto, non come autenticarsi ad esso.

Questa pagina documenta solo il comportamento osservabile dall’esterno e la superficie API pubblica supportata. I percorsi di namespace interni, le classi helper, le tabelle dei meccanismi, i nomi di file di runbook e i prefissi di ticket sono fuori ambito.