Ga naar inhoud
getnextpdf.com

Enterprise editie

Release — Diepe referentie

De namespace NextPDF\Enterprise\Release modelleert een productrelease als onveranderlijke, getypeerde value objects. Het publieke oppervlak bestaat uit zeven final classes en vijf string-backed enums. ReleaseManifest aggregeert ArtifactManifest-vermeldingen per artefact plus bewijspaden voor de toeleveringsketen. BuildProfile is de enige bron van waarheid voor één artefactvariant. ArtifactNamer en PackageMapping leiden deterministische bestandsnamen en de Composer-package-identiteit af uit een profiel. PublishingPlan::fromProfiles resolveert elk profiel naar getypeerde PublishingTarget-vermeldingen met het juiste kanaal en de juiste toegangsgrens. ReleaseStatus typeert de levenscyclus van de release. De module voert geen I/O, geen netwerkaanroepen en geen cryptografie uit; het is pure metadatamodellering.

Deze functionaliteit wordt geleverd in NextPDF Enterprise (nextpdf/enterprise) en wordt geactiveerd met een licentie-envelop op Enterprise-niveau. Een deployment zonder dat recht laadt de classes van deze functionaliteit niet. Vergelijk edities en vraag een licentie aan.

Dit oppervlak wordt gelicentieerd via de pakketgrens nextpdf/enterprise en heeft geen aparte capaciteitscode per functie. Core en Pro leveren geen release-modelleringslaag.

Terminal window
composer require nextpdf/enterprise:^3
SymboolParametersStandaardgedragRetourneertGooit of faalt metOpmerkingen
ReleaseManifest::__constructversion, sourceCommit, builtAt, artifacts = [], sbomPath = null, gpgSignature = null, checksumPath = nullBouwt het onveranderlijke releasedocument op het hoogste niveauinstantiefinal readonly; SCHEMA_VERSION is '1.0'; minor voor additieve velden, major voor breaking; sinds 3.0.0
ReleaseManifest::createWithDefaultsstring $version, string $sourceCommit, DateTimeImmutable $builtAt, array $artifacts = []Bedraadt vooraf de standaard SBOM-, handtekening- en checksum-bestandsnamen via ArtifactNamerselfCanoniek startpunt voor release-builders; gebruik de constructor om individuele paden te overschrijven
ReleaseManifest::toArray / ::toJsongeenSerialiseert het manifest met alle artefactvermeldingenarray / JSON-stringtoJson: JsonException bij encoderingsfoutPretty-printed, niet-escapete slashes; built_at in ATOM-formaat
ReleaseManifest::validategeenControleert of de artefactlijst niet leeg is en of elk artefact overeenkomt met de releaseversie en -commitlist<string> met fouten; leeg betekent geldigGooit nooitAanroepers moeten een niet-lege lijst als een defect behandelen
ArtifactManifest::__constructfilename, version, sourceCommit, edition, deliveryMode, encodingTechnology, channel, phpTarget, sha256, ioncubeExpire, builtAtRegistreert één gebouwd artefact: wat is gebouwd, hoe, en hoe je het verifieertinstantiefinal readonly; ioncubeExpire is null voor niet-vervallende artefacten
ArtifactManifest::fromProfileBuildProfile $profile, string $version, string $sourceCommit, string $sha256, ?DateTimeImmutable $builtAt = nullLeidt de bestandsnaam en alle profieldimensies afselfbuiltAt valt standaard terug op de huidige tijd
ArtifactManifest::toArraygeenSerialiseert voor JSON-encoderingarray<string, string|null>Enum-velden serialiseren naar hun backing-stringwaarden
BuildProfile::__construct / ::fromArrayprofielvelden / array $dataDefinieert één artefactvariant; de enige bron van waarheid voor naamgeving, manifest en planinstantie / selffromArray: InvalidArgumentException bij een ontbrekend of leeg verplicht veldVerplichte keys: name, edition, delivery, encoding_technology, channel, php_target
BuildProfile::requiresEncoding / ::isEvaluationgeenPredicate-helpers over de profieldimensiesboolEncodering vereist DeliveryMode::Encoded en EncodingTechnology::IonCube samen
ArtifactNamer::formatBuildProfile $profile, string $versionGenereert nextpdf-{edition}-{delivery}-{channel}-php{target}-{version}.zipnon-empty-stringDeterministisch; punten worden verwijderd uit de PHP-target (8.4 wordt php84)
ArtifactNamer::checksumFile / ::signatureFile / ::sbomFile / ::manifestFilestring $version (manifestFile: geen)Genereert SHA256SUMS-{v}.txt, SHA256SUMS-{v}.txt.asc, sbom-{v}.cdx.json, release-manifest.jsonnon-empty-stringDe SBOM-bestandsnaam komt overeen met het CycloneDX-document dat de SBOM-generator van Core schrijft
PackageMapping::packageName / ::resolvePackageNameBuildProfile / LicenseEdition + LicenseChannelMapt naar nextpdf/pro of nextpdf/enterprise; het evaluatiekanaal voegt -evaluation toenon-empty-stringInvalidArgumentException bij een onbekende editieDe aparte evaluation-namespace voorkomt vermenging met betaalde artefacten
PackageMapping::distUrlPatternBuildProfile $profile, string $versionResolveert de download-URL van het artefact in het canonieke artefact-repositorynon-empty-stringEncoded en cleartext delen een package-naam; hun dist-URL’s verschillen
PackageMapping::accessBoundary / ::artifactOrigin / ::consumptionChannel / ::allPackageNamesBuildProfile / geen / geen / geenDe grens volgt het licentiekanaal; vaste oorsprong- en consumptiekanalen; alle klantgerichte package-namenAccessBoundary / DistributionChannel / DistributionChannel / list<non-empty-string>Core is geen premium-package en wordt uitgesloten van de namenlijst
PublishingPlan::fromProfilesarray $profiles, string $version, PublishingEnvironment $environment = StagingResolveert twee doelen per profiel: één artefactoorsprong, één consumptielaagselfDe omgeving valt standaard terug op Staging; productie is altijd een expliciete keuze
PublishingPlan::targetsByBoundary / ::targetsByChannel / ::packageNamesAccessBoundary / DistributionChannel / geenFilter- en enumeratie-helpers over de geresolveerde doelenlist<PublishingTarget> / list<PublishingTarget> / list<non-empty-string>packageNames is gesorteerd en ontdubbeld
PublishingPlan::validategeenControleert of de doelen niet leeg zijn, of de versies overeenkomen met het plan, en of geen enkel evaluation-package in een betaalde grens zitlist<string> met fouten; leeg betekent geldigGooit nooitVoer uit vóór elke uploadstap
PublishingPlan::toArraygeenSerialiseert voor dry-run-uitvoer en loggingarray<string, mixed>Bevat target_count en de package-lijst
PublishingTarget::fromProfileBuildProfile $profile, string $version, PublishingEnvironment $environment, DistributionChannel $channelResolveert de package-naam, toegangsgrens en artefactbestandsnaam voor één kanaalselffinal readonly; toArray serialiseert voor logging
AccessBoundaryenum: Paid, Evaluation, InternalisCustomerFacing is alleen true voor Paid en Evaluationonderliggende waarden: 'paid', 'evaluation', 'internal'requiresAuthentication retourneert true voor elke grens
DistributionChannelenum: GitHubReleases, PrivatePackagist, DirectDownloadisArtifactOrigin en isConsumptionLayer splitsen de twee rollenonderliggende waarden: 'github_releases', 'private_packagist', 'direct_download'DirectDownload is gereserveerd voor een toekomstig signed-URL-kanaal
EncodingTechnologyenum: IonCube, NoneBenoemt de encoderingstool, onderscheiden van de leveringsvormonderliggende waarden: 'ioncube', 'none'Een cleartext-artefact rapporteert altijd None
PublishingEnvironmentenum: Staging, ProductionisCustomerFacing is alleen true voor Productiononderliggende waarden: 'staging', 'production'Staging is een intern verificatiedoel
ReleaseStatusenum: Built, Audited, Staged, Published, Revoked, SupersededcanPromote, nextStatus, isCustomerVisible, isTerminal typeren de levenscyclusnextStatus retourneert ?selfPromotieketen Built → Audited → Staged → Published; Revoked en Superseded zijn terminaal

Startpunt-signatures, letterlijk uit de bron:

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
  • Elke class is final; elke value class is readonly. Constructie legt alle state vast. De module voert geen filesystem-, netwerk- of cryptografische bewerkingen uit.
  • ReleaseManifest is het onveranderlijke document op het hoogste niveau voor een versie: semantische versie, source commit, build-tijdstempel, artefactlijst en optionele bewijspaden voor de toeleveringsketen (SBOM, GPG-handtekening, checksums). De schemaversie is minor-voor-additief en major-voor-breaking.
  • BuildProfile is de enige bron van waarheid voor wat een artefact bevat en hoe het wordt verpakt. Naamgeving, manifest en plan worden allemaal afgeleid uit het profiel; er is geen secundaire configuratiebron.
  • EncodingTechnology benoemt de encoderingstool; DeliveryMode (uit de Licensing-module) benoemt de geleverde vorm. De twee zijn bewust gescheiden, en een cleartext-artefact rapporteert altijd EncodingTechnology::None.
  • DistributionChannel scheidt een artefactoorsprong (binaire opslag; de uploadbestemming) van een pakketconsumptielaag (het register dat een composer require leest). De oorsprong slaat de binary op; de consumptielaag levert de metadata die ernaar verwijst.
  • AccessBoundary somt Paid, Evaluation en Internal op. Elke grens vereist authenticatie. Internal-artefacten bedienen CI, QA en staging en zijn nooit klantgericht.
  • PublishingPlan::fromProfiles resolveert elk profiel naar precies twee doelen: een artefactoorsprong-doel en een consumptielaag-doel, met de toegangsgrens afgeleid uit het licentiekanaal van het profiel zodat betaalde en evaluatie-artefacten correct worden gerouteerd.
  • Het plan is beschrijvend voor de beoogde doelen, niet voor transport. De werkelijke upload wordt uitgevoerd door de omringende release-tooling, en het manifest registreert — maar produceert zelf niet — het bewijs voor de toeleveringsketen.
  • ReleaseStatus typeert de levenscyclus: Built → Audited → Staged → Published, met Revoked en Superseded als terminale uitgangen vanuit Published. Alleen Published is zichtbaar voor de klant; canPromote is false vanaf Published.
  • ReleaseManifest::validate en PublishingPlan::validate rapporteren consistentiefouten als stringlijsten en gooien nooit. Een lege lijst is de enige geldige uitkomst.
  • BuildProfile::fromArray met een ontbrekend, niet-string of leeg verplicht veld: InvalidArgumentException die het veld benoemt.
  • BuildProfile::fromArray met een lege of niet-string ioncube_expire: genormaliseerd naar null (niet-vervallend). Niet-string of lege vermeldingen in encode_paths en exclude_paths worden stil weggelaten.
  • PackageMapping::resolvePackageName met een editie buiten de bekende map: InvalidArgumentException.
  • ReleaseManifest::toJson op niet-encodeerbare data: JsonException. Serialisatie gebruikt JSON_THROW_ON_ERROR; er is geen stille fallback.
  • ReleaseManifest::validate rapporteert een lege artefactlijst, en elk artefact waarvan de versie of source commit afwijkt van de release, als fouten.
  • PublishingPlan::validate rapporteert een lege doellijst, elke doelversie die afwijkt van het plan, en elk evaluation-package dat in een betaalde grens is geresolveerd.
  • ReleaseStatus::nextStatus retourneert null vanuit Published, Revoked en Superseded. Aanroepers moeten null afhandelen; er is geen wrap-around.
  • De oorsprong- en consumptielaag-kanalen zijn onderscheiden; richt een composer require niet op de artefactoorsprong.
  • Internal-boundary-artefacten zijn nooit klantgericht; ze naar een klantkanaal routeren is een expliciete modelleringsfout.
  • Deze module voert geen cryptografische bewerkingen uit. GPG-ondertekening en checksum-generatie zijn extern en worden hier alleen gerefereerd.

Er wordt voor deze module geen conformiteit met standaarden geclaimd; het is een release-modelleringslaag, en NextPDF houdt geen certificering. De standaard SBOM-bestandsnaam (sbom-{version}.cdx.json) komt overeen met het CycloneDX-document dat de SBOM-generator van Core schrijft; het manifest refereert dat bewijs en valideert het niet. GPG-handtekeningen en checksums worden geproduceerd en geverifieerd door de omringende release-pijplijn. Het registreren van een bewijspad is een capaciteit, geen attestatie: een manifest is op zichzelf geen bewijs, attesteert geen herkomst, certificeert geen release en vormt geen juridisch advies.

  • Geef de voorkeur aan ReleaseManifest::createWithDefaults zodat de bewijsbestandsnamen altijd overeenkomen met ArtifactNamer. Reserveer de kale constructor voor bewuste overschrijvingen per pad.
  • Voer beide validate()-gates uit in CI vóór elke publicatiestap en laat de pijplijn falen bij een niet-lege foutenlijst.
  • PublishingPlan::fromProfiles valt standaard terug op PublishingEnvironment::Staging. Geef Production expliciet mee; niets in deze module promoveert een omgeving impliciet.
  • Geserialiseerde manifesten dragen enum-backing-waarden (paid, encoded, ioncube, enzovoort) en ATOM-tijdstempels; behandel die strings als het wire-contract.
  • Evaluation-artefacten leven in een aparte package-namespace (-evaluation-suffix). Houd betaalde en evaluation-registers gescheiden in je Composer-configuratie.
  • Routering, referenties en opslag per kanaal vallen onder de verantwoordelijkheid van de operator. Het plan vertelt de tooling waar een artefact thuishoort, niet hoe je je daar authenticeert.

Deze pagina documenteert alleen extern waarneembaar gedrag en het ondersteunde publieke API-oppervlak. Interne namespace-paden, helper-classes, mechanismetabellen, runbook-bestandsnamen en ticketprefixen vallen buiten scope.