PHPackages                             prestashop/ps\_checkout - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. prestashop/ps\_checkout

ActivePrestashop-module[Utility &amp; Helpers](/categories/utility)

prestashop/ps\_checkout
=======================

PrestaShop module

V9.4.3.3(1y ago)371550[2 PRs](https://github.com/PrestaShopCorp/ps_checkout/pulls)AFL-3.0PHPPHP &gt;=8.1CI passing

Since Jul 3Pushed 1w ago19 watchersCompare

[ Source](https://github.com/PrestaShopCorp/ps_checkout)[ Packagist](https://packagist.org/packages/prestashop/ps_checkout)[ Docs](https://github.com/PrestaShopCorp/ps_checkout)[ RSS](/packages/prestashop-ps-checkout/feed)WikiDiscussions main Synced today

READMEChangelog (10)Dependencies (20)Versions (263)Used By (0)Security (4)

GitHub CI/CD Reference
======================

[](#github-cicd-reference)

All workflows, composite actions, required secrets, and the release pipeline dependency chain.

---

Dependency map
--------------

[](#dependency-map)

 ```
flowchart LR
    PR["pull_request"]
    PUSH["push: main / 5.*"]
    PR_LABEL["pull_request\n+ deployment label"]
    RELEASE["release\nprereleased / released"]

    PR --> lint["Lint\nlint.yml"]
    PUSH --> lint
    PR --> phpcompat["PHP Compatibility\nphpcompat.yml"]
    PUSH --> phpcompat
    PR --> ci["CI – PHPUnit Tests\nci.yml\n(label: ready to review)"]

    PR_LABEL --> testing["Build ZIPs – INT/PREPROD\ncreate-testing-zip.yml"]

    RELEASE --> gh_release["Build Release ZIPs – PRODUCTION\ngithub-release.yml"]
    gh_release -- "workflow_run (on success)" --> publish["Publish to Marketplace\npublish-to-marketplace.yml\n(if is_prerelease == false)"]
```

      Loading ---

PR / Push workflows
-------------------

[](#pr--push-workflows)

### `lint.yml` — Lint

[](#lintyml--lint)

**Triggers:** `pull_request`, `push` to `main` or `5.*`

Two parallel jobs — no dependency between them.

JobWhat it does`php-cs-fixer`Runs `composer cs:ci`, pipes output through `cs2pr` for inline PR annotations. PHP 8.5.`phpstan` (matrix: ps17 / ps8 / ps9)Runs `composer phpstan:ci` inside each PS-version directory. PHP 8.5, `--ignore-platform-reqs`.---

### `phpcompat.yml` — PHP Compatibility

[](#phpcompatyml--php-compatibility)

**Triggers:** `pull_request`, `push` to `main` or `5.*`

Checks the codebase stays compatible with PHP 7.1 targets via PHPCompatibility sniffs. Single job, no matrix.

StepDetailSetupPHP 8.5, `composer install`Check`composer phpcompat:71`---

### `ci.yml` — CI – PHPUnit Tests

[](#ciyml--ci--phpunit-tests)

**Triggers:** `pull_request` (opened, synchronize, reopened, labeled) — **only when the `ready to review` label is present.**

The label gate is intentional: avoids burning runner time on WIP PRs. The workflow runs when the label is added or the PR is synchronized after it was added.

**Matrix:** ps17 · PS 1.7.7.0 · PHP 7.2 / ps8 · PS 8.1.5 · PHP 8.1 / ps9 · PS 9.0.0 · PHP 8.4

**Services:** MariaDB 10.9 (health-checked)

Steps per matrix leg:

1. Pull the matching PrestaShop Docker image and start a container against the MariaDB service
2. Wait for PrestaShop auto-install to complete (polls every 5 s, timeout 5 min)
3. Copy the module and all monorepo packages into the container; run `composer install`
4. Run PHPUnit for **infrastructure**, **utility**, **core**, and **presentation** (unit suites)
5. Install the module via `bin/console prestashop:module install`, create the integration test database
6. Run **core integration** tests
7. Stop the container (always, even on failure)

---

Release pipeline
----------------

[](#release-pipeline)

### `github-release.yml` — Build Release ZIPs – PRODUCTION

[](#github-releaseyml--build-release-zips--production)

**Triggers:** `release: prereleased`, `release: released`

**Concurrency:** grouped by `workflow + tag_name` — superseded runs are cancelled.

Builds and attaches one ZIP per PS version to the GitHub Release. Handles both the standard pre-release → promote flow and direct latest-release creation. Exits green (skipping the build) when ZIPs already exist, so the downstream `workflow_run` can fire correctly.

**Jobs:**

#### `save-release-context`

[](#save-release-context)

Writes the release tag name to a file and uploads it as a `release-tag` artifact (retention: 1 day). This is the reliable source of the tag for the publish workflow — `head_branch` in `workflow_run` context resolves to the branch name (`main`), not the tag.

#### `prepare-zip` (matrix: ps17 · PHP 7.2 / ps8 · PHP 8.1 / ps9 · PHP 8.4)

[](#prepare-zip-matrix-ps17--php-72--ps8--php-81--ps9--php-84)

StepDetailGenerate release filename`ps_checkout-v{suffix}.{clean_tag}.zip` — e.g. `ps_checkout-v8.5.5.0.zip` for tag `v5.5.0`Check if ZIP already existsQueries release assets via `gh release view`; sets `artifact_exists` outputAuth GCP`.github/actions/auth-gcp` with production secretsWrite production `.env`Fetches `module-v5-env` from GCP Secret Manager (production project)Package moduleCalls `.github/actions/package-module` — see [Composite actions](#composite-actions)Upload ZIP to GitHub ReleaseAttaches the ZIP using `artifact_exists != 'true'` guard**Secrets required:** `WI_PROVIDER_V2_PRODUCTION`, `WI_SA_V2_PRODUCTION`, `GCP_PROJECT_PRODUCTION`, `GITHUB_TOKEN`

---

### `publish-to-marketplace.yml` — Publish to Marketplace

[](#publish-to-marketplaceyml--publish-to-marketplace)

**Triggers:** `workflow_run` on "Build Release ZIPs – PRODUCTION" — `completed`

Only runs when the triggering workflow concluded with `success`. Uses `prestashop/publish-on-marketplace` to call the marketplace seller API.

**Jobs:**

#### `check-release`

[](#check-release)

Runs when `workflow_run.conclusion == 'success'`.

1. Downloads the `release-tag` artifact from the triggering run using `run-id`
2. Calls `gh api /repos/.../releases/tags/{tag}` to resolve `is_prerelease`, `clean_tag`, and the release body (changelog)
3. Uploads the changelog as a `release-changelog` artifact so each matrix leg in `publish` can download it without a redundant API call

Outputs: `tag`, `clean_tag`, `is_prerelease`

#### `publish` (matrix: suffix 7 / 8 / 9)

[](#publish-matrix-suffix-7--8--9)

Only runs when `needs.check-release.outputs.is_prerelease == 'false'`.

StepDetailVerify release ZIP is available`gh release view` — fails with a clear `::error::` if the asset is missingDownload release ZIP`gh release download --pattern`Install publishing tool`composer global require prestashop/publish-on-marketplace`Publish to Marketplace`publish-on-marketplace --archive --metadata-json --changelog-file --debug`Metadata files: `.github/mktp-metadata-{7|8|9}.json` — `compatible_from` is `1.7.7.0` / `8.0.0` / `9.0.0`. Product ID: `46347`.

**Secrets required:** `MARKETPLACE_API_KEY`, `GITHUB_TOKEN`

#### Release flows

[](#release-flows)

FlowTrigger chainPublishes?Pre-release created`prereleased` → github-release.yml builds ZIPs → workflow\_run fires → `is_prerelease=true` → publish skippedNoPre-release promoted to latest`released` → github-release.yml runs, ZIPs exist → exits green → workflow\_run fires → `is_prerelease=false` → publishesYesDirect latest release`released` → github-release.yml builds ZIPs → exits green → workflow\_run fires → `is_prerelease=false` → publishesYes---

Testing deployment
------------------

[](#testing-deployment)

### `create-testing-zip.yml` — Build Module ZIPs – INT/PREPROD

[](#create-testing-zipyml--build-module-zips--intpreprod)

**Triggers:** `pull_request` (edited, labeled, synchronize) — only when a deployment label is present.

LabelEnvironment`prestabulle1` … `prestabulle9`Integration (env-specific GCP secrets)`preproduction deployment`Preproduction**Jobs:**

#### `generate-shared-date`

[](#generate-shared-date)

Produces a shared timestamp (now + 2 h, format `YYYY-MM-DD_HH-MM-SS`) used in all three ZIP bucket paths so matrix legs sort together.

#### `prepare-zip` (matrix: ps17 · PHP 7.2 / ps8 · PHP 8.1 / ps9 · PHP 8.4)

[](#prepare-zip-matrix-ps17--php-72--ps8--php-81--ps9--php-84-1)

StepDetailDetermine EnvironmentReads PR labels to pick env, resolves GCP secret namesAuth GCP`.github/actions/auth-gcp` with env-specific secretsWrite `.env`Fetches the environment-specific config from GCP Secret ManagerPackage moduleCalls `.github/actions/package-module`; the `.env` above is embedded in the ZIPGenerate GCP bucket filename`pr{n}/ps_checkout-{suffix}-{env}-{n}-{date}.zip`Upload to GCP bucket`gsutil cp {zip_path} gs://ps-eu-w1-checkout-assets-{env}/{filename}`**Secrets required:** `WI_PROVIDER_V2_{INTEGRATION|PREPRODUCTION}`, `WI_SA_V2_{INTEGRATION|PREPRODUCTION}`, `GCP_PROJECT_{INTEGRATION|PREPRODUCTION}`

---

Composite actions
-----------------

[](#composite-actions)

### `.github/actions/package-module`

[](#githubactionspackage-module)

Sets up PHP, builds, and packages a `ps_checkout` module version into a production-ready ZIP. The calling workflow must write the correct `.env` to the workspace root before invoking — the action will fail loudly if it is missing.

**Inputs:**

InputRequiredDescription`module_dir`✓Module directory: `ps17`, `ps8`, or `ps9``module_suffix`✓PS major version suffix: `7`, `8`, or `9``php_version`✓PHP version passed to `shivammathur/setup-php``release_filename`✓Output ZIP filename, e.g. `ps_checkout-v8.5.5.0.zip`**Output:** `zip_path` — absolute path to the generated ZIP. Use `${{ steps..outputs.zip_path }}` in subsequent steps.

**Steps:**

1. `shivammathur/setup-php@v2` with the given PHP version
2. `composer install --no-dev --prefer-dist --optimize-autoloader` inside `module_dir`
3. Copy `api/`, `core/`, `infrastructure/`, `presentation/`, `utility/` into `module_dir/vendor/invertus/`
4. Strip dev artefacts: `.php-cs-fixer.*`, `tests/`, `vendor/tests/`, `phpstan.neon`, `phpstan-baseline.neon`, all `monorepo.json` files, `vendor/invertus/*/tests/`
5. Assert `.env` exists; copy into the package
6. Zip the package, output `zip_path`

**Used by:** `github-release.yml`, `create-testing-zip.yml`

---

### `.github/actions/auth-gcp`

[](#githubactionsauth-gcp)

Authenticates to Google Cloud via Workload Identity Federation (keyless — no long-lived service account keys). Optionally installs the gcloud SDK and configures Docker or GKE authentication.

**Key inputs:**

InputRequiredDefaultDescription`provider`✓—GCP Workload Identity Provider URL`service-account`✓—Service account email to impersonate`setup-gcloud``false`Install the gcloud SDK`registry-login``false`Configure Docker for GCP Artifact Registry (`europe-west1-docker.pkg.dev`)`gke-cluster-name``""`If set, adds kubectl credentials for the named cluster**Used by:** `github-release.yml`, `create-testing-zip.yml`

---

Secrets reference
-----------------

[](#secrets-reference)

SecretDescriptionUsed by`MARKETPLACE_API_KEY`PrestaShop Marketplace seller API key`publish-to-marketplace.yml``WI_PROVIDER_V2_PRODUCTION`GCP Workload Identity Provider — production`github-release.yml``WI_SA_V2_PRODUCTION`GCP service account email — production`github-release.yml``GCP_PROJECT_PRODUCTION`GCP project ID — production`github-release.yml``WI_PROVIDER_V2_PREPRODUCTION`GCP Workload Identity Provider — preproduction`create-testing-zip.yml``WI_SA_V2_PREPRODUCTION`GCP service account email — preproduction`create-testing-zip.yml``GCP_PROJECT_PREPRODUCTION`GCP project ID — preproduction`create-testing-zip.yml``WI_PROVIDER_V2_INTEGRATION`GCP Workload Identity Provider — integration (prestabulle)`create-testing-zip.yml``WI_SA_V2_INTEGRATION`GCP service account email — integration`create-testing-zip.yml``GCP_PROJECT_INTEGRATION`GCP project ID — integration`create-testing-zip.yml``GITHUB_TOKEN`Auto-provided by GitHub Actions. Release asset upload/download, GH CLI calls.`github-release.yml`, `publish-to-marketplace.yml`

###  Health Score

55

—

FairBetter than 97% of packages

Maintenance76

Regular maintenance activity

Popularity22

Limited adoption so far

Community23

Small or concentrated contributor base

Maturity88

Battle-tested with a long release history

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~14 days

Recently: every ~6 days

Total

182

Last Release

7d ago

Major Versions

v7.4.3.0 → v8.4.3.12025-02-11

v7.4.3.1 → v9.4.3.12025-03-05

v7.4.4.0 → v9.4.3.22025-04-16

v5.0.4 → v7.4.4.12025-10-16

v7.4.4.1 → v8.4.4.12025-10-16

PHP version history (3 changes)v2.0.0PHP &gt;=5.6.0

v3.0.0PHP &gt;=7.2

v9.4.3.1PHP &gt;=8.1

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/15106407?v=4)[Jarvis](/maintainers/ps-jarvis)[@ps-jarvis](https://github.com/ps-jarvis)

---

Top Contributors

[![Matt75](https://avatars.githubusercontent.com/u/5262628?v=4)](https://github.com/Matt75 "Matt75 (82 commits)")[![gaelreyrol](https://avatars.githubusercontent.com/u/498465?v=4)](https://github.com/gaelreyrol "gaelreyrol (62 commits)")[![L3RAZ](https://avatars.githubusercontent.com/u/25088641?v=4)](https://github.com/L3RAZ "L3RAZ (52 commits)")[![matks](https://avatars.githubusercontent.com/u/3830050?v=4)](https://github.com/matks "matks (34 commits)")[![PSebou](https://avatars.githubusercontent.com/u/98540591?v=4)](https://github.com/PSebou "PSebou (6 commits)")

---

Tags

prestashop-module

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/prestashop-ps-checkout/health.svg)

```
[![Health](https://phpackages.com/badges/prestashop-ps-checkout/health.svg)](https://phpackages.com/packages/prestashop-ps-checkout)
```

###  Alternatives

[laravel/framework

The Laravel Framework.

34.8k543.8M20.1k](/packages/laravel-framework)[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.5k5.9M737](/packages/sylius-sylius)[grumpydictator/firefly-iii

Firefly III: a personal finances manager.

23.9k69.5k](/packages/grumpydictator-firefly-iii)[shlinkio/shlink

A self-hosted and PHP-based URL shortener application with CLI and REST interfaces

5.1k5.2k](/packages/shlinkio-shlink)[firefly-iii/data-importer

Firefly III Data Import Tool.

8035.8k](/packages/firefly-iii-data-importer)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

585.6M574](/packages/shopware-core)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
