Skip to main content
Effective date: 8 April 2026
Last updated: 8 April 2026

1. Introduction

PropOps Technologies Ltd (“PropOps”, “we”, “us”) is committed to transparent, verifiable software delivery practices. This page describes how PropOps Web is built, packaged, and distributed — giving customers, auditors, and partners confidence in the integrity of every release. Our supply chain practices are aligned with the (Supply-chain Levels for Software Artifacts) framework and follow industry guidance from the NCSC.

2. Source Control

PracticeDetail
Version controlAll source code is managed in a private, secure under the PropOps Technologies Ltd organisation
Branch protectionDevelopment and production branches are protected with required reviews and status checks
Commit signingCommits from automated pipelines are cryptographically signed using a verified bot identity
Access controlRepository access is restricted to authorised personnel with

3. Release Pipeline

PropOps Web follows a strict, multi-gate promotion model. Code is never deployed directly from development to production. Every release must pass through each gate in sequence before it can reach a customer environment.

3.1 Source Code Deployment

Every update is tracked via a transparent digital “Paper Trail,” linking every feature and security patch to a unique, auditable commit. No change enters the pipeline without a full version-controlled history.

3.2 Code Quality Check

Automated and ensure the codebase meets strict professional standards, eliminating logic flaws before they reach your server. This includes PHP syntax validation across all application files and verification that upload endpoints are properly hardened against dangerous file types.

3.3 Vulnerability Scan

Deep scans identify and flag supply chain risks in third-party libraries, ensuring no compromised dependency is ever integrated into a release.

3.4 Malware Scan

Every build artefact is scanned for malicious signatures to guarantee the software is neutralised and safe for your corporate network.

3.5 Snyk AI Vulnerability Scan

PropOps integrates industry-leading Snyk AI to perform real-time code analysis. This ensures that every line of logic is screened for and regulatory non-compliance before it ever touches your data, providing a continuous safety net that legacy systems cannot offer.

3.6 Staging & Human Testing

Every build is first deployed to an isolated staging environment for manual to ensure flawless UI/UX performance. The staging environment is rebuilt from scratch on every deployment — not incrementally patched — eliminating configuration drift.

3.7 Approve System Changes

No code reaches production without a manual and Senior Sign-off, serving as a final human guard gate for stability. A is opened for review, and the merge must be explicitly approved before any code is promoted.

3.8 Pre-Package Clean-up

All development tools, test suites, build manifests, and non-essential files are stripped from the deployable artefact, creating a lean, hardened production asset with a reduced attack surface. The following are removed:
  • Development configuration and IDE files
  • Test suites and documentation
  • Build manifests and lock files
  • Source control metadata

3.9 Cryptographic Signing

We use to digitally sign every release with , providing a seal of authenticity that guarantees the code is untampered. This cryptographic attestation proves what was built, where it was built, how it was built, and who triggered the build.

3.10 Docker Release

The verified code is delivered in a , ensuring the environment you host is identical to the one we secured and tested. Container images are published to a secure, private .

4. Container Image Details

Production releases are distributed as Docker container images.

4.1 Image Construction

PropertyValue
Base imagephp:8.5-apache (official Docker Hub image)
RegistryPrivate
Build runnerCloud-hosted build environment
Build tool with build cache
TriggerAutomatic when a release PR is approved and merged

4.2 Image Tags

Each image is published with three tags for traceability:
TagPurpose
latest or custom version (e.g., v1.2.3)Human-readable release identifier
Short SHA (e.g., a1b2c3d)Exact commit traceability
Build date (e.g., build-20260408)Temporal reference

4.3 Image Labels

Every image carries including:
  • Source repository link
  • Full
  • Vendor identification (PropOps Technologies Ltd)

5. Verifying a Release

Customers and auditors can independently verify any PropOps Web container image to confirm it was built by our from the expected source code and has not been tampered with.

5.1 How to Verify

You can verify any release using the . Run the following command, replacing the tag with the version you want to check:
gh attestation verify oci://ghcr.io/propops-technologies-ltd/propops-web:<TAG> \
  --owner PropOps-Technologies-Ltd
A successful result confirms:
  • The image was built by the PropOps automated pipeline
  • It was built from the expected source repository
  • It has not been modified since it was signed
If verification fails, do not deploy the image and contact security@propops.co.uk immediately.

5.2 Release Log

The table below is automatically updated each time a new production release is built and attested.
DateVersionCommitDigestAttested
No releases yet

6. Dependency Management

6.1 PHP Dependencies

PracticeDetail
Package managerComposer
Lock filecomposer.lock is committed to source control, ensuring reproducible installs
Production installcomposer install --no-dev --optimize-autoloader — development dependencies are never included in deployable builds

6.2 JavaScript Dependencies

PracticeDetail
Package managernpm
Lock filepackage-lock.json is committed to source control
Production buildnpm ci for deterministic installs; node_modules is removed after build assets are generated

6.3 Automated Dependency Updates

Automated dependency monitoring scans all third-party libraries for known and automatically proposes updates when security patches are available.

7. File Integrity & Checksums

7.1 Build-Time Checksums

During every production Docker image build, are generated for all application files. These checksums are:
  • Computed at build time from the exact files included in the image
  • Structured as a JSON payload containing the file path and corresponding hash for each file
  • Published to the PropOps integrity verification endpoint for later comparison

7.2 Runtime Integrity Monitoring

PropOps Web includes runtime file integrity checks via scheduled cron tasks. These compare the deployed file state against known-good checksums and alert administrators if unexpected modifications are detected.

8. Environment & Secrets Management

PracticeDetail
Secrets storageAll deployment credentials and API keys are stored in encrypted secret vaults within the build platform — never committed to source code
Environment filesConfiguration files are excluded from the Docker image. On first container start, the entrypoint script generates a secure configuration from a template with auto-generated encryption keys
Encryption keysEncryption and authentication keys are automatically generated on first boot if not provided, using
File permissionsSensitive configuration files are restricted to owner read/write only inside the container

9. Persistent Data

User uploads, configuration, and database data are stored on host-mounted volumes outside the container. Container rebuilds and updates do not affect persistent data.

10. Incident Response

If a supply chain compromise is suspected:
  1. We revoke and rotate all affected credentials and signing keys
  2. We rebuild and re-attest affected images from verified source
  3. We notify affected customers through our standard communication channels
  4. We publish a post-incident summary describing the scope, impact, and remediation

11. Contact

For questions about our software supply chain practices, or to report a security concern:

12. Changes to This Page

We may update this page as our build and delivery practices evolve. Material changes will be reflected in the “Last updated” date at the top of this page.