Przejdź do głównej zawartości
getnextpdf.com

Enterprise edycja

Release — szczegółowa referencja

Przestrzeń nazw NextPDF\Enterprise\Release modeluje wydanie produktu jako niezmienne, typowane obiekty wartości. Jej publiczna powierzchnia to siedem klas final oraz pięć wyliczeń opartych na łańcuchach znaków. ReleaseManifest agreguje wpisy ArtifactManifest dla poszczególnych artefaktów oraz ścieżki dowodów łańcucha dostaw. BuildProfile jest jedynym źródłem prawdy dla jednego wariantu artefaktu. ArtifactNamer oraz PackageMapping wyprowadzają z profilu deterministyczne nazwy plików i tożsamość pakietu Composer. PublishingPlan::fromProfiles rozwiązuje każdy profil do typowanych wpisów PublishingTarget z właściwym kanałem i granicą dostępu. ReleaseStatus typuje cykl życia wydania. Moduł nie wykonuje operacji wejścia/wyjścia, nie wykonuje wywołań sieciowych ani kryptografii; to czyste modelowanie metadanych.

Ta funkcjonalność jest dostarczana w NextPDF Enterprise (nextpdf/enterprise) i aktywuje się w ramach koperty licencyjnej poziomu Enterprise. Wdrożenie bez tego uprawnienia nie ładuje klas tej funkcjonalności. Porównaj edycje i uzyskaj licencję.

Ta powierzchnia jest licencjonowana granicą pakietu nextpdf/enterprise i nie ma osobnego kodu funkcjonalności dla poszczególnych funkcji. Core i Pro nie dostarczają warstwy modelowania wydań.

Okno terminala
composer require nextpdf/enterprise:^3
SymbolParametryZachowanie domyślneZwracaZgłasza lub kończy się niepowodzeniemUwagi
ReleaseManifest::__constructversion, sourceCommit, builtAt, artifacts = [], sbomPath = null, gpgSignature = null, checksumPath = nullBuduje niezmienny dokument wydania najwyższego poziomuinstancjafinal readonly; SCHEMA_VERSION to '1.0'; minor dla pól dodatkowych, major dla zmian łamiących; od 3.0.0
ReleaseManifest::createWithDefaultsstring $version, string $sourceCommit, DateTimeImmutable $builtAt, array $artifacts = []Wstępnie konfiguruje domyślne nazwy plików SBOM, podpisu i sumy kontrolnej za pomocą ArtifactNamerselfKanoniczny punkt wejścia dla budowniczych wydań; użyj konstruktora, aby nadpisać poszczególne ścieżki
ReleaseManifest::toArray / ::toJsonbrakSerializuje manifest ze wszystkimi wpisami artefaktówarray / łańcuch JSONtoJson: JsonException przy niepowodzeniu kodowaniaSformatowane czytelnie, bez ucieczkowania ukośników; built_at w formacie ATOM
ReleaseManifest::validatebrakSprawdza, czy lista artefaktów jest niepusta i czy każdy artefakt jest zgodny z wersją i commitem wydanialist<string> błędów; pusta oznacza poprawnośćNigdy nie zgłasza wyjątkuWywołujący muszą traktować niepustą listę jako defekt
ArtifactManifest::__constructfilename, version, sourceCommit, edition, deliveryMode, encodingTechnology, channel, phpTarget, sha256, ioncubeExpire, builtAtRejestruje jeden zbudowany artefakt: co zbudowano, jak i jak to zweryfikowaćinstancjafinal readonly; ioncubeExpire to null dla artefaktów bez terminu wygaśnięcia
ArtifactManifest::fromProfileBuildProfile $profile, string $version, string $sourceCommit, string $sha256, ?DateTimeImmutable $builtAt = nullWyprowadza nazwę pliku oraz wszystkie wymiary profiluselfbuiltAt domyślnie przyjmuje bieżący czas
ArtifactManifest::toArraybrakSerializuje do kodowania JSONarray<string, string|null>Pola wyliczeń serializują się do swoich bazowych wartości łańcuchowych
BuildProfile::__construct / ::fromArraypola profilu / array $dataDefiniuje jeden wariant artefaktu; jedyne źródło prawdy dla nazewnictwa, manifestu i planuinstancja / selffromArray: InvalidArgumentException przy brakującym lub pustym polu wymaganymKlucze wymagane: name, edition, delivery, encoding_technology, channel, php_target
BuildProfile::requiresEncoding / ::isEvaluationbrakPomocnicze predykaty nad wymiarami profiluboolKodowanie wymaga jednoczesnego DeliveryMode::Encoded oraz EncodingTechnology::IonCube
ArtifactNamer::formatBuildProfile $profile, string $versionEmituje nextpdf-{edition}-{delivery}-{channel}-php{target}-{version}.zipnon-empty-stringDeterministyczny; kropki są usuwane z docelowej wersji PHP (8.4 staje się php84)
ArtifactNamer::checksumFile / ::signatureFile / ::sbomFile / ::manifestFilestring $version (manifestFile: brak)Emituje SHA256SUMS-{v}.txt, SHA256SUMS-{v}.txt.asc, sbom-{v}.cdx.json, release-manifest.jsonnon-empty-stringNazwa pliku SBOM odpowiada dokumentowi CycloneDX zapisywanemu przez generator SBOM w Core
PackageMapping::packageName / ::resolvePackageNameBuildProfile / LicenseEdition + LicenseChannelMapuje na nextpdf/pro lub nextpdf/enterprise; kanał ewaluacyjny dopisuje -evaluationnon-empty-stringInvalidArgumentException przy nieznanej edycjiOsobna przestrzeń nazw ewaluacji zapobiega mieszaniu z płatnymi artefaktami
PackageMapping::distUrlPatternBuildProfile $profile, string $versionRozwiązuje adres URL pobierania artefaktu w kanonicznym repozytorium artefaktównon-empty-stringWersja kodowana i jawnotekstowa dzielą nazwę pakietu; ich adresy URL dystrybucji się różnią
PackageMapping::accessBoundary / ::artifactOrigin / ::consumptionChannel / ::allPackageNamesBuildProfile / brak / brak / brakGranica podąża za kanałem licencji; stałe kanały źródła i konsumpcji; wszystkie nazwy pakietów udostępnianych klientowiAccessBoundary / DistributionChannel / DistributionChannel / list<non-empty-string>Core nie jest pakietem premium i jest wykluczony z listy nazw
PublishingPlan::fromProfilesarray $profiles, string $version, PublishingEnvironment $environment = StagingRozwiązuje dwa cele na profil: jedno źródło artefaktu, jedna warstwa konsumpcjiselfŚrodowisko domyślnie przyjmuje Staging; produkcja jest zawsze jawnym wyborem
PublishingPlan::targetsByBoundary / ::targetsByChannel / ::packageNamesAccessBoundary / DistributionChannel / brakPomocnicze filtry i wyliczenia nad rozwiązanymi celamilist<PublishingTarget> / list<PublishingTarget> / list<non-empty-string>packageNames jest posortowana i pozbawiona duplikatów
PublishingPlan::validatebrakSprawdza, czy cele są niepuste, czy wersje są zgodne z planem i czy żaden pakiet ewaluacyjny nie znajduje się w granicy płatnejlist<string> błędów; pusta oznacza poprawnośćNigdy nie zgłasza wyjątkuUruchom przed każdym krokiem przesyłania
PublishingPlan::toArraybrakSerializuje na potrzeby wyniku dry-run i logowaniaarray<string, mixed>Zawiera target_count oraz listę pakietów
PublishingTarget::fromProfileBuildProfile $profile, string $version, PublishingEnvironment $environment, DistributionChannel $channelRozwiązuje nazwę pakietu, granicę dostępu i nazwę pliku artefaktu dla jednego kanałuselffinal readonly; toArray serializuje na potrzeby logowania
AccessBoundarywyliczenie: Paid, Evaluation, InternalisCustomerFacing ma wartość true tylko dla Paid i Evaluationoparte na 'paid', 'evaluation', 'internal'requiresAuthentication zwraca true dla każdej granicy
DistributionChannelwyliczenie: GitHubReleases, PrivatePackagist, DirectDownloadisArtifactOrigin i isConsumptionLayer rozdzielają dwie roleoparte na 'github_releases', 'private_packagist', 'direct_download'DirectDownload jest zarezerwowany dla przyszłego kanału z podpisanymi adresami URL
EncodingTechnologywyliczenie: IonCube, NoneNazywa narzędzie kodowania, odrębne od formy dostarczaniaoparte na 'ioncube', 'none'Artefakt jawnotekstowy zawsze zgłasza None
PublishingEnvironmentwyliczenie: Staging, ProductionisCustomerFacing ma wartość true tylko dla Productionoparte na 'staging', 'production'Staging jest wewnętrznym celem weryfikacji
ReleaseStatuswyliczenie: Built, Audited, Staged, Published, Revoked, SupersededcanPromote, nextStatus, isCustomerVisible, isTerminal typują cykl życianextStatus zwraca ?selfŁańcuch promocji Built → Audited → Staged → Published; Revoked i Superseded są terminalne

Sygnatury punktów wejścia, dosłownie ze źródła:

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
  • Każda klasa jest final; każda klasa wartości jest readonly. Konstrukcja ustala cały stan. Moduł nie wykonuje żadnych operacji na systemie plików, sieciowych ani kryptograficznych.
  • ReleaseManifest to niezmienny dokument najwyższego poziomu dla danej wersji: wersja semantyczna, commit źródłowy, znacznik czasu kompilacji, lista artefaktów oraz opcjonalne ścieżki dowodów łańcucha dostaw (SBOM, podpis GPG, sumy kontrolne). Wersja jego schematu jest minor dla dodatków i major dla zmian łamiących.
  • BuildProfile jest jedynym źródłem prawdy dla tego, co zawiera artefakt i jak jest pakowany. Nazewnictwo, manifest i plan — wszystkie wyprowadzają się z profilu; nie ma wtórnego źródła konfiguracji.
  • EncodingTechnology nazywa narzędzie kodowania; DeliveryMode (z modułu Licensing) nazywa dostarczoną formę. Te dwa pojęcia są celowo rozdzielone, a artefakt jawnotekstowy zawsze zgłasza EncodingTechnology::None.
  • DistributionChannel oddziela źródło artefaktu (magazyn binariów; miejsce docelowe przesyłania) od warstwy konsumpcji pakietu (rejestru, który odczytuje composer require). Źródło przechowuje binarium; warstwa konsumpcji udostępnia metadane, które na nie wskazują.
  • AccessBoundary wylicza Paid, Evaluation oraz Internal. Każda granica wymaga uwierzytelnienia. Artefakty Internal obsługują CI, QA i staging i nigdy nie są udostępniane klientowi.
  • PublishingPlan::fromProfiles rozwiązuje każdy profil do dokładnie dwóch celów: celu źródła artefaktu i celu warstwy konsumpcji, z granicą dostępu wyprowadzoną z kanału licencji profilu, dzięki czemu artefakty płatne i ewaluacyjne są kierowane prawidłowo.
  • Plan opisuje zamierzone cele, a nie transport. Faktyczne przesłanie wykonuje otaczające narzędzia wydania, a manifest rejestruje — lecz sam nie wytwarza — dowody łańcucha dostaw.
  • ReleaseStatus typuje cykl życia: Built → Audited → Staged → Published, z Revoked i Superseded jako terminalnymi wyjściami z Published. Tylko Published jest widoczny dla klienta; canPromote ma wartość false od Published w górę.
  • ReleaseManifest::validate oraz PublishingPlan::validate zgłaszają błędy spójności jako listy łańcuchów znaków i nigdy nie zgłaszają wyjątku. Pusta lista jest jedynym poprawnym wynikiem.
  • BuildProfile::fromArray z brakującym, nie będącym łańcuchem lub pustym polem wymaganym: InvalidArgumentException nazywający to pole.
  • BuildProfile::fromArray z pustym lub nie będącym łańcuchem ioncube_expire: normalizowany do null (bez wygaśnięcia). Wpisy w encode_paths i exclude_paths, które nie są łańcuchami lub są puste, są po cichu odrzucane.
  • PackageMapping::resolvePackageName z edycją spoza znanej mapy: InvalidArgumentException.
  • ReleaseManifest::toJson na danych niemożliwych do zakodowania: JsonException. Serializacja używa JSON_THROW_ON_ERROR; nie ma cichego zachowania awaryjnego.
  • ReleaseManifest::validate zgłasza jako błędy pustą listę artefaktów oraz każdy artefakt, którego wersja lub commit źródłowy różni się od wydania.
  • PublishingPlan::validate zgłasza pustą listę celów, każdą wersję celu odbiegającą od planu oraz każdy pakiet ewaluacyjny rozwiązany do granicy płatnej.
  • ReleaseStatus::nextStatus zwraca null z Published, Revoked i Superseded. Wywołujący muszą obsłużyć null; nie ma zawijania.
  • Kanały źródła i warstwy konsumpcji są odrębne; nie kieruj composer require na źródło artefaktu.
  • Artefakty z granicy Internal nigdy nie są udostępniane klientowi; ich skierowanie do kanału klienta to jawny błąd modelowania.
  • Ten moduł nie wykonuje żadnych operacji kryptograficznych. Podpisywanie GPG i generowanie sum kontrolnych są zewnętrzne i tutaj jedynie przywoływane.

Dla tego modułu nie deklaruje się żadnej zgodności ze standardami; to warstwa modelowania wydań, a NextPDF nie posiada żadnej certyfikacji. Domyślna nazwa pliku SBOM (sbom-{version}.cdx.json) odpowiada dokumentowi CycloneDX zapisywanemu przez generator SBOM w Core; manifest odwołuje się do tego dowodu i go nie waliduje. Podpisy GPG i sumy kontrolne są wytwarzane i weryfikowane przez otaczający potok wydania. Zarejestrowanie ścieżki dowodu jest funkcjonalnością, a nie poświadczeniem: manifest sam w sobie nie jest dowodem, nie poświadcza pochodzenia, nie certyfikuje wydania ani nie stanowi porady prawnej.

  • Preferuj ReleaseManifest::createWithDefaults, aby nazwy plików dowodów zawsze zgadzały się z ArtifactNamer. Zarezerwuj surowy konstruktor na celowe nadpisania poszczególnych ścieżek.
  • Uruchamiaj obie bramki validate() w CI przed każdym krokiem publikacji i przerywaj potok przy niepustej liście błędów.
  • PublishingPlan::fromProfiles domyślnie przyjmuje PublishingEnvironment::Staging. Przekaż Production jawnie; nic w tym module nie promuje środowiska w sposób niejawny.
  • Serializowane manifesty niosą bazowe wartości wyliczeń (paid, encoded, ioncube itd.) oraz znaczniki czasu ATOM; traktuj te łańcuchy jako kontrakt transmisyjny.
  • Artefakty ewaluacyjne żyją w osobnej przestrzeni nazw pakietu (sufiks -evaluation). Utrzymuj rejestry płatne i ewaluacyjne rozdzielone w konfiguracji Composer.
  • Kierowanie dla poszczególnych kanałów, poświadczenia i przechowywanie należą do obowiązków operatora. Plan mówi narzędziom, gdzie należy artefakt, a nie jak się do niego uwierzytelnić.

Ta strona dokumentuje wyłącznie zewnętrznie obserwowalne zachowanie oraz wspieraną powierzchnię publicznego API. Wewnętrzne ścieżki przestrzeni nazw, klasy pomocnicze, tabele mechanizmów, nazwy plików runbooków oraz prefiksy zgłoszeń są poza zakresem.