コンテンツにスキップ
getnextpdf.com

Enterprise エディション

リリース — 詳細リファレンス

NextPDF\Enterprise\Release 名前空間は、プロダクトリリースをイミュータブルで型付けされた値オブジェクトとしてモデル化します。その公開サーフェスは、7 個の final クラスと 5 個の文字列バックド enum です。ReleaseManifest は、アーティファクトごとの ArtifactManifest エントリと、サプライチェーン証跡のパスを集約します。BuildProfile は、1 つのアーティファクトバリアントに対する唯一の信頼できる情報源です。ArtifactNamerPackageMapping は、プロファイルから決定的なファイル名と Composer パッケージ識別子を導出します。PublishingPlan::fromProfiles は、すべてのプロファイルを、正しいチャネルとアクセス境界を持つ型付けされた PublishingTarget エントリに解決します。ReleaseStatus は、リリースのライフサイクルを型付けします。このモジュールは I/O、ネットワーク呼び出し、暗号処理を一切行いません。純粋なメタデータモデリングです。

このケイパビリティは NextPDF Enterprisenextpdf/enterprise)に同梱されており、Enterprise ティアのライセンスエンベロープで有効化されます。その資格を持たないデプロイメントでは、このケイパビリティのクラスはロードされません。エディションを比較してライセンスを取得

このサーフェスは nextpdf/enterprise パッケージの境界によってライセンスされ、機能ごとに独立したケイパビリティコードはありません。Core と Pro は、リリースモデリングレイヤーを同梱していません。

Terminal window
composer require nextpdf/enterprise:^3
シンボルパラメータデフォルトの挙動戻り値スロー/失敗条件備考
ReleaseManifest::__constructversion, sourceCommit, builtAt, artifacts = [], sbomPath = null, gpgSignature = null, checksumPath = nullイミュータブルな最上位リリースドキュメントを構築インスタンスfinal readonlySCHEMA_VERSION'1.0'。追加フィールドはマイナー、破壊的変更はメジャー。since 3.0.0
ReleaseManifest::createWithDefaultsstring $version, string $sourceCommit, DateTimeImmutable $builtAt, array $artifacts = []ArtifactNamer を介してデフォルトの SBOM、署名、チェックサムのファイル名を事前設定selfリリースビルダー向けの正規のエントリポイント。個別パスの上書きにはコンストラクタを使用
ReleaseManifest::toArray / ::toJsonなしすべてのアーティファクトエントリを含めてマニフェストをシリアライズarray / JSON 文字列toJson: エンコード失敗時に JsonException整形出力、スラッシュ非エスケープ。built_at は ATOM 形式
ReleaseManifest::validateなしアーティファクトリストが空でなく、各アーティファクトがリリースのバージョンとコミットに一致することを検査エラーの list<string>。空なら有効スローしない呼び出し側は空でないリストを欠陥として扱う必要あり
ArtifactManifest::__constructfilename, version, sourceCommit, edition, deliveryMode, encodingTechnology, channel, phpTarget, sha256, ioncubeExpire, builtAtビルドされた 1 つのアーティファクトを記録。何を、どのようにビルドし、どのように検証するかインスタンスfinal readonly。有効期限のないアーティファクトでは ioncubeExpirenull
ArtifactManifest::fromProfileBuildProfile $profile, string $version, string $sourceCommit, string $sha256, ?DateTimeImmutable $builtAt = nullファイル名とすべてのプロファイル次元を導出selfbuiltAt は現在時刻がデフォルト
ArtifactManifest::toArrayなしJSON エンコード向けにシリアライズarray<string, string|null>enum フィールドはバッキングの文字列値にシリアライズ
BuildProfile::__construct / ::fromArrayプロファイルフィールド / array $data1 つのアーティファクトバリアントを定義。命名、マニフェスト、プランの唯一の信頼できる情報源インスタンス / selffromArray: 必須フィールドの欠落または空の場合に InvalidArgumentException必須キー: name, edition, delivery, encoding_technology, channel, php_target
BuildProfile::requiresEncoding / ::isEvaluationなしプロファイル次元に対する述語ヘルパーboolエンコーディングには DeliveryMode::EncodedEncodingTechnology::IonCube の両方が必要
ArtifactNamer::formatBuildProfile $profile, string $versionnextpdf-{edition}-{delivery}-{channel}-php{target}-{version}.zip を出力non-empty-string決定的。PHP ターゲットからドットを除去(8.4php84 になる)
ArtifactNamer::checksumFile / ::signatureFile / ::sbomFile / ::manifestFilestring $versionmanifestFile: なし)SHA256SUMS-{v}.txtSHA256SUMS-{v}.txt.ascsbom-{v}.cdx.jsonrelease-manifest.json を出力non-empty-stringSBOM のファイル名は Core の SBOM ジェネレーターが書き出す CycloneDX ドキュメントと一致
PackageMapping::packageName / ::resolvePackageNameBuildProfile / LicenseEdition + LicenseChannelnextpdf/pro または nextpdf/enterprise にマッピング。評価版チャネルは -evaluation を付加non-empty-string未知のエディションの場合に InvalidArgumentException独立した評価版名前空間により、有料アーティファクトとの混在を防止
PackageMapping::distUrlPatternBuildProfile $profile, string $version正規のアーティファクトリポジトリ上のアーティファクトダウンロード URL を解決non-empty-stringエンコード版とクリアテキスト版はパッケージ名を共有するが、dist URL は異なる
PackageMapping::accessBoundary / ::artifactOrigin / ::consumptionChannel / ::allPackageNamesBuildProfile / なし / なし / なし境界はライセンスチャネルに従う。オリジンと消費チャネルは固定。すべての顧客向けパッケージ名AccessBoundary / DistributionChannel / DistributionChannel / list<non-empty-string>Core はプレミアムパッケージではなく、名前リストから除外
PublishingPlan::fromProfilesarray $profiles, string $version, PublishingEnvironment $environment = Stagingプロファイルごとに 2 つのターゲット(アーティファクトオリジン 1 つ、消費レイヤー 1 つ)を解決self環境は Staging がデフォルト。本番は常に明示的な選択
PublishingPlan::targetsByBoundary / ::targetsByChannel / ::packageNamesAccessBoundary / DistributionChannel / なし解決済みターゲットに対するフィルタと列挙のヘルパーlist<PublishingTarget> / list<PublishingTarget> / list<non-empty-string>packageNames はソートおよび重複排除済み
PublishingPlan::validateなしターゲットが空でなく、バージョンがプランに一致し、評価版パッケージが有料境界に存在しないことを検査エラーの list<string>。空なら有効スローしないいかなるアップロード手順よりも前に実行
PublishingPlan::toArrayなしドライラン出力とログ向けにシリアライズarray<string, mixed>target_count とパッケージリストを含む
PublishingTarget::fromProfileBuildProfile $profile, string $version, PublishingEnvironment $environment, DistributionChannel $channel1 つのチャネルに対するパッケージ名、アクセス境界、アーティファクトファイル名を解決selffinal readonlytoArray はログ向けにシリアライズ
AccessBoundaryenum: Paid, Evaluation, InternalisCustomerFacingPaidEvaluation のみ true'paid''evaluation''internal' がバッキング値requiresAuthentication はすべての境界で true を返す
DistributionChannelenum: GitHubReleases, PrivatePackagist, DirectDownloadisArtifactOriginisConsumptionLayer が 2 つの役割を分離'github_releases''private_packagist''direct_download' がバッキング値DirectDownload は将来の署名付き URL チャネル用に予約
EncodingTechnologyenum: IonCube, Noneデリバリー形式とは別に、エンコーディングツールを命名'ioncube''none' がバッキング値クリアテキストのアーティファクトは常に None を報告
PublishingEnvironmentenum: Staging, ProductionisCustomerFacingProduction のみ true'staging''production' がバッキング値Staging は内部検証用ターゲット
ReleaseStatusenum: Built, Audited, Staged, Published, Revoked, SupersededcanPromotenextStatusisCustomerVisibleisTerminal がライフサイクルを型付けnextStatus?self を返す昇格チェーンは Built → Audited → Staged → Published。RevokedSuperseded は終端

エントリポイントのシグネチャ(ソースからの逐語):

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
  • すべてのクラスは final であり、すべての値クラスは readonly です。構築によってすべての状態が確定します。このモジュールは、ファイルシステム、ネットワーク、暗号の操作を一切行いません。
  • ReleaseManifest は、あるバージョンに対するイミュータブルな最上位ドキュメントです。セマンティックバージョン、ソースコミット、ビルドタイムスタンプ、アーティファクトリスト、およびオプションのサプライチェーン証跡パス(SBOM、GPG 署名、チェックサム)を保持します。そのスキーマバージョンは、追加に対してはマイナー、破壊的変更に対してはメジャーです。
  • BuildProfile は、アーティファクトが何を含み、どのようにパッケージ化されるかについての唯一の信頼できる情報源です。命名、マニフェスト、プランはすべてプロファイルから導出され、二次的な構成ソースは存在しません。
  • EncodingTechnology はエンコーディングツールを命名し、DeliveryMode(Licensing モジュール由来)は配信される形式を命名します。この 2 つは意図的に分離されており、クリアテキストのアーティファクトは常に EncodingTechnology::None を報告します。
  • DistributionChannel は、アーティファクトのオリジン(バイナリストレージ。アップロード先)を、パッケージの消費レイヤー(composer require が読み取るレジストリ)から分離します。オリジンはバイナリを保管し、消費レイヤーはそれを指し示すメタデータを提供します。
  • AccessBoundary は、Paid、Evaluation、Internal を列挙します。すべての境界が認証を必要とします。Internal のアーティファクトは CI、QA、ステージングに供され、顧客向けには決して公開されません。
  • PublishingPlan::fromProfiles は、各プロファイルをちょうど 2 つのターゲット(アーティファクトオリジンターゲットと消費レイヤーターゲット)に解決します。アクセス境界はプロファイルのライセンスチャネルから導出され、有料アーティファクトと評価版アーティファクトが正しくルーティングされます。
  • このプランは意図されたターゲットを記述したものであり、トランスポートではありません。実際のアップロードは周辺のリリースツールによって実行され、マニフェストはサプライチェーン証跡を記録します(ただし、それ自体が証跡を生成するわけではありません)。
  • ReleaseStatus は、ライフサイクルを型付けします。Built → Audited → Staged → Published であり、RevokedSupersededPublished からの終端出口です。顧客に可視なのは Published のみで、canPromotePublished 以降 false です。
  • ReleaseManifest::validatePublishingPlan::validate は、一貫性エラーを文字列リストとして報告し、決してスローしません。空のリストが唯一の有効な結果です。
  • BuildProfile::fromArray で必須フィールドが欠落、非文字列、または空の場合: 該当フィールドを示す InvalidArgumentException
  • BuildProfile::fromArrayioncube_expire が空または非文字列の場合: null(有効期限なし)に正規化。encode_pathsexclude_paths 内の非文字列または空のエントリは、警告なく破棄。
  • PackageMapping::resolvePackageName で既知のマップ外のエディションの場合: InvalidArgumentException
  • ReleaseManifest::toJson でエンコード不能なデータの場合: JsonException。シリアライズは JSON_THROW_ON_ERROR を使用し、暗黙のフォールバックはありません。
  • ReleaseManifest::validate は、空のアーティファクトリストと、バージョンまたはソースコミットがリリースと異なるアーティファクトを、エラーとして報告します。
  • PublishingPlan::validate は、空のターゲットリスト、プランと乖離するターゲットバージョン、および有料境界に解決された評価版パッケージを報告します。
  • ReleaseStatus::nextStatus は、PublishedRevokedSuperseded から null を返します。呼び出し側は null を処理する必要があり、ラップアラウンドはありません。
  • オリジンチャネルと消費レイヤーチャネルは別個のものです。composer require をアーティファクトオリジンに向けないでください。
  • Internal 境界のアーティファクトは、顧客向けには決して公開されません。それを顧客チャネルにルーティングすることは、明示的なモデリングエラーです。
  • このモジュールは暗号操作を一切行いません。GPG 署名とチェックサム生成は外部で行われ、ここでは参照されるのみです。

このモジュールについて、標準への適合は一切主張しません。これはリリースモデリングレイヤーであり、NextPDF はいかなる認証も保有していません。デフォルトの SBOM ファイル名(sbom-{version}.cdx.json)は、Core の SBOM ジェネレーターが書き出す CycloneDX ドキュメントと一致します。マニフェストはその証跡を参照しますが、検証はしません。GPG 署名とチェックサムは、周辺のリリースパイプラインによって生成および検証されます。証跡パスの記録はケイパビリティであって、証明ではありません。マニフェストはそれ単独では証拠にならず、来歴を証明せず、リリースを認証せず、法的助言を構成しません。

  • 証跡ファイル名が常に ArtifactNamer と一致するよう、ReleaseManifest::createWithDefaults を優先してください。生のコンストラクタは、意図的なパスごとの上書きのために取っておきます。
  • 両方の validate() ゲートを、いかなる公開手順よりも前に CI で実行し、空でないエラーリストの場合はパイプラインを失敗させてください。
  • PublishingPlan::fromProfilesPublishingEnvironment::Staging がデフォルトです。Production は明示的に渡してください。このモジュール内には環境を暗黙的に昇格させるものはありません。
  • シリアライズされたマニフェストは、enum のバッキング値(paidencodedioncube など)と ATOM タイムスタンプを保持します。これらの文字列をワイヤ契約として扱ってください。
  • 評価版アーティファクトは、独立したパッケージ名前空間(-evaluation サフィックス)に存在します。Composer の構成では、有料レジストリと評価版レジストリを別個に保ってください。
  • チャネルごとのルーティング、認証情報、ストレージは、オペレーターの責任です。プランはツールにアーティファクトの帰属先を伝えますが、それへの認証方法は伝えません。

このページは、外部から観測可能な挙動とサポートされる公開 API サーフェスのみを文書化しています。内部名前空間パス、ヘルパークラス、メカニズムテーブル、ランブックのファイル名、チケットプレフィックスは対象外です。