mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2026-09-24 03:35:05 -04:00
Closes #4695 Master and PR builds were tagging every Docker image with the App.php version (e.g. 3.4.2-master-<sha>), flooding Docker Hub with tags for versions that were never released. Docker tags are now scoped to the ref: - master → master, <sha> - branch → <branch>-<sha> - semver tag → <version>, latest Additional hardening: - Release tag trigger restricted to three-component semver (N.N.N) so non-semver tags (e.g. 3.preview) no longer publish a `latest` image - Branch names sanitized: chars outside [a-zA-Z0-9_.-] replaced with _, total tag truncated to stay within Docker's 128-char limit, leading `.` or `-` prevented - Fixed README.md claim that master builds push a `latest` tag
GitHub Actions
This document describes the CI/CD workflows for OSPOS.
Build and Release Workflow (.github/workflows/build-release.yml)
Build Process
- Setup PHP 8.2 with required extensions
- Setup Node.js 20
- Install composer dependencies
- Install npm dependencies
- Build frontend assets with Gulp
Docker Images
- Build and push
opensourceposDocker image for multiple architectures (linux/amd64, linux/arm64) - On
master: taggedmasterand<sha> - On other branches: tagged
<branch>-<sha> - On a semver tag (e.g.
3.4.2): tagged<version>andlatest - The version number is never stamped onto
master/branch builds — it only appears on tag releases - Pushed to Docker Hub
Releases
- Create distribution archives (tar.gz, zip)
- Create/update GitHub "unstable" release on master branch only
Required Secrets
To use this workflow, you need to add the following secrets to your repository:
- DOCKER_USERNAME - Docker Hub username for pushing images
- DOCKER_PASSWORD - Docker Hub password/token for pushing images
How to add secrets
- Go to your repository on GitHub
- Click Settings → Secrets and variables → Actions
- Click New repository secret
- Add
DOCKER_USERNAMEandDOCKER_PASSWORD
The GITHUB_TOKEN is automatically provided by GitHub Actions.
Workflow Triggers
- Push to master - Runs build, Docker push (
master+<sha>tags), and creates/updates theunstablerelease - Push to other branches - Runs build and Docker push (
<branch>-<sha>tag) - Push a semver tag (e.g.
3.4.2) - Runs build and Docker push (<version>+latesttags) - Pull requests - Runs build only (PHPUnit tests run in parallel via phpunit.yml); no Docker push
Existing Workflows
This repository also has these workflows:
.github/workflows/main.yml- PHP linting with PHP-CS-Fixer.github/workflows/phpunit.yml- PHPUnit tests (runs on all PHP versions 8.1-8.4).github/workflows/php-linter.yml- PHP linting
Testing
PHPUnit tests are run separately via .github/workflows/phpunit.yml on every push and pull request, testing against PHP 8.1, 8.2, 8.3, and 8.4.
To test the build workflow:
- Add the required secrets
- Push to master or create a PR
- Monitor the Actions tab in GitHub