{"id":20976903,"url":"https://github.com/pixelbrackets/pap","last_synced_at":"2025-12-26T09:35:42.236Z","repository":{"id":57042003,"uuid":"285226711","full_name":"pixelbrackets/pap","owner":"pixelbrackets","description":null,"archived":false,"fork":false,"pushed_at":"2021-11-24T12:38:21.000Z","size":659,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-19T13:47:29.550Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://gitlab.com/pixelbrackets/pap","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pixelbrackets.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-08-05T08:23:27.000Z","updated_at":"2021-11-24T15:33:30.000Z","dependencies_parsed_at":"2022-08-23T23:40:09.339Z","dependency_job_id":null,"html_url":"https://github.com/pixelbrackets/pap","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/pixelbrackets/pap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixelbrackets%2Fpap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixelbrackets%2Fpap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixelbrackets%2Fpap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixelbrackets%2Fpap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pixelbrackets","download_url":"https://codeload.github.com/pixelbrackets/pap/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixelbrackets%2Fpap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28051469,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-26T02:00:06.189Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-19T04:56:16.860Z","updated_at":"2025-12-26T09:35:42.204Z","avatar_url":"https://github.com/pixelbrackets.png","language":"PHP","readme":"# PAP\n\n![Logo](./docs/icon.png)\n\n**P**HP **A**pp **P**ublication\n\n[![Version](https://img.shields.io/packagist/v/pixelbrackets/pap.svg?style=flat-square)](https://packagist.org/packages/pixelbrackets/pap/)\n[![Build Status](https://img.shields.io/gitlab/pipeline/pixelbrackets/pap?style=flat-square)](https://gitlab.com/pixelbrackets/pap/pipelines)\n[![Made With](https://img.shields.io/badge/made_with-php-blue?style=flat-square)](https://gitlab.com/pixelbrackets/pap#requirements)\n[![License](https://img.shields.io/badge/license-gpl--2.0--or--later-blue.svg?style=flat-square)](https://spdx.org/licenses/GPL-2.0-or-later.html)\n[![Contribution](https://img.shields.io/badge/contributions_welcome-%F0%9F%94%B0-brightgreen.svg?labelColor=brightgreen\u0026style=flat-square)](https://gitlab.com/pixelbrackets/pap/-/blob/master/CONTRIBUTING.md)\n\nToolchain to publish a PHP App. Configured with a YAML file only.\n\n🚀\n\n- Build Assets - Minify \u0026 concat CSS, JavaScript, SVG assets\n- Build App - Prepare expected directory structures \u0026 fetch packages\n- Lint - Identify errors before the app is running\n- Deploy - Sync files to configurable target stages\n- Verify - Do a smoke test to verify that the app is still working\n- Test - Start integration tests\n\n🔧\n\n- All general settings and shared stages are configured in a YAML file\n\n🎯\n\n- KISS - Not made for every condition, but easy to use and integrate\n\n![Screenshot](./docs/screenshot.png)\n\n## Vision\n\n- One CLI script with a fixed set of task commands\n  - No mix, extending or renaming of task commands\n  - Tasks not configured will abort instead of failing\n- Configuration with a flat text file\n- Override settings for local machines\n- Installation reduced to a bare minimum\n- Portable, easy to integrate in many repositories\n- Useable by a person who never deployed the app before\n  - No additional knowledge required\n  - One command is enough to deploy the app to a stage\n- Always the same commands, don't care about the configuration set up\n- Works well with robots (CI)\n- Minimal requirements on target stage\n- Rsync to synchronize files - no FTP\n- SSH to connect to stages\n- No rollback - Use Git to revert changes\n- No provisioning\n- Support for monorepos\n- Deploy to many stages\n\nGeneral approach: Not made for every condition, but easy to use and integrate\n\n## Requirements\n\n- cURL, SSH \u0026 rsync\n- Git\n- PHP\n- Composer\n- SSH-Account on target stage(s) with read \u0026 write access,\n  and right to run cURL, rsync and PHP\n\n## Installation\n\nPackagist Entry https://packagist.org/packages/pixelbrackets/pap/\n\n- `composer require pixelbrackets/pap`\n\n💡 Use the\n[skeleton project](https://packagist.org/packages/pixelbrackets/pap-skeleton/)\nto create a `build` directory and add required configuration files right away.\n\n```bash\ncomposer create-project pixelbrackets/pap-skeleton build\n```\n\nRead the [integration guide](#integration) to learn how to add the tool to\nyour own app.\n\n## Source\n\nhttps://gitlab.com/pixelbrackets/pap/\n\nMirror https://github.com/pixelbrackets/pap/ (Issues \u0026 Pull Requests\nmirrored to GitLab)\n\n## Usage\n\nRun `./vendor/bin/pap` to see all available tasks. Some common tasks are:\n\n1. Deploy to »live« stage\n   ```bash\n   ./vendor/bin/pap deploy --stage live\n   ```\n\n1. Deploy to »local« stage, used for development (default stage)\n   ```bash\n   ./vendor/bin/pap deploy\n   ```\n\n1. Sync to »local« stage (skips building assets)\n   ```bash\n   ./vendor/bin/pap sync\n   ```\n\n1. Sync to »local« stage automatically if anything changes in the\n   source directory (files changed, added or removed)\n   ```bash\n   ./vendor/bin/pap watch\n   ```\n\n1. Lint current build\n   ```bash\n   ./vendor/bin/pap lint\n   ```\n\n### Commands\n\n\u003c!-- Generate using `./bin/pap list` and sort alphabetically --\u003e\n\n```\nbuild             Alias to run »buildassets« and »buildapp«\nbuildapp          Build PHP structure for desired target stage (move files, fetch dependencies)\nbuildassets       Build HTML assets (convert, concat, minify…)\ncomposer:command  Execute Composer commands on target stage\ncomposer:install  Install packages with Composer\ndeploy            Run full deployment stack (build, sync, composer command)\nhelp              Displays help for a command\nlint              Alias to run »lint:check«\nlint:check        Lint files (Check only)\nlint:fix          Lint files (Fix)\nlist              Lists commands\npublish           Run full publication stack (lint, deploy, smoketest, test)\nshow              Pretty print configuration for debugging\nsmoketest         Run a build verification test against target stage\nssh               Alias to run »ssh:connect«\nssh:connect       Open SSH connection to target stage\nsync              Synchronize files to target stage\ntest              Run tests suite against target stage\nview              Open the public URL of target stage in the browser\nwatch             Sync changed files automatically to local stage\n```\n\n## Integration\n\n- [Install PAP](#installation), either as dependency or in a designated\n  subfolder\n  - Best practice is to create a separate directory for the build \u0026 deploy \n    process, this is not mandatory however\n- Add the PAP [configuration](#configuration) file\n  `pap.yml` for all shared settings\n- Add `pap.local.yml` to your `.gitignore` file\n- Add `.pap.lock` to your `.gitignore` file\n- Optional but recommended: Add a template file to overwrite local settings,\n  eg. `pap.local.template.yml`\n- Add a README how to use PAP\n\n💡 There is a\n[skeleton project](https://packagist.org/packages/pixelbrackets/pap-skeleton/)\navailable to create a build directory and add the above mentioned files.\n\n```bash\ncomposer create-project pixelbrackets/pap-skeleton build\n```\n\n## Configuration\n\n- All general settings and shared stages are configured in\n  the distribution file `pap.yml`\n- All settings and stages may be overriden in a local environment file\n  `pap.local.yml`\n  - This file should be added to the `.gitignore` list\n- PAP always uses the root directory of the Git repository for all configurable\n  paths, which allows storing the configuration file in any subdirectory\n- 📝 Documentation of all [available options](./docs/configuration.md)\n\n💡 Additionally to this short integration and configuration guide you may\nwant to take a look at the [walktrough tutorial](./docs/walktrough.md),\nwhich explains all steps to configure an example app.\n\n## Updates\n\nSee [Upgrade Guide](./docs/upgrade-guide.md)\n\n## License\n\nGNU General Public License version 2 or later\n\nThe GNU General Public License can be found at http://www.gnu.org/copyleft/gpl.html.\n\n## Author\n\nDan Untenzu (\u003cmail@pixelbrackets.de\u003e / [@pixelbrackets](https://pixelbrackets.de))\n\n## Changelog\n\nSee [CHANGELOG.md](./CHANGELOG.md)\n\n## Contribution\n\nThis script is Open Source, so please use, share, patch, extend or fork it.\n\n[Contributions](./CONTRIBUTING.md) are welcome!\n\n## Feedback\n\nPlease send some [feedback](https://pixelbrackets.de/) and share how this\npackage has proven useful to you or how you may help to improve it.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpixelbrackets%2Fpap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpixelbrackets%2Fpap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpixelbrackets%2Fpap/lists"}