{"id":14985973,"url":"https://github.com/pullpreview/action","last_synced_at":"2026-02-10T15:22:34.800Z","repository":{"id":37774796,"uuid":"255978101","full_name":"pullpreview/action","owner":"pullpreview","description":"A GitHub Action that starts preview deployments for your pull requests and branches. It can work with any application that has a valid Docker Compose file.","archived":false,"fork":false,"pushed_at":"2025-01-28T07:30:33.000Z","size":423,"stargazers_count":173,"open_issues_count":5,"forks_count":15,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-03T21:32:53.314Z","etag":null,"topics":["action","aws","branch","continuous-deployment","continuous-integration","deploy","deployment","docker","docker-compose","ephemeral-environments","github-actions","preview-environment","pull-request","staging"],"latest_commit_sha":null,"homepage":"https://pullpreview.com","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pullpreview.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-15T16:40:36.000Z","updated_at":"2025-03-17T11:55:47.000Z","dependencies_parsed_at":"2024-02-05T13:34:18.033Z","dependency_job_id":"c9c80048-6106-48c2-b176-27bf1c5d5b22","html_url":"https://github.com/pullpreview/action","commit_stats":{"total_commits":136,"total_committers":6,"mean_commits":"22.666666666666668","dds":0.05882352941176472,"last_synced_commit":"7eecd65a3d22e642318bb63306887e9d28deaec9"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pullpreview%2Faction","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pullpreview%2Faction/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pullpreview%2Faction/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pullpreview%2Faction/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pullpreview","download_url":"https://codeload.github.com/pullpreview/action/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254493382,"owners_count":22080126,"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","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":["action","aws","branch","continuous-deployment","continuous-integration","deploy","deployment","docker","docker-compose","ephemeral-environments","github-actions","preview-environment","pull-request","staging"],"created_at":"2024-09-24T14:12:04.034Z","updated_at":"2026-02-10T15:22:34.703Z","avatar_url":"https://github.com/pullpreview.png","language":"Ruby","readme":"# PullPreview\n\nA GitHub Action that starts live environments for your pull requests and branches.\n\n[![pullpreview](https://github.com/pullpreview/action/actions/workflows/pullpreview.yml/badge.svg)](https://github.com/pullpreview/action/actions/workflows/pullpreview.yml)\n\u003ca href=\"https://news.ycombinator.com/item?id=23221471\"\u003e\u003cimg src=\"https://img.shields.io/badge/Hacker%20News-83-%23FF6600\" alt=\"Hacker News\"\u003e\u003c/a\u003e\n\n## Spin environments in one click\n\nOnce installed in your repository, this action is triggered any time a change\nis made to Pull Requests labelled with the `pullpreview` label, or one of the\n_always-on_ branches.\n\nWhen triggered, it will:\n\n1. Check out the repository code\n2. Provision a cheap AWS Lightsail instance, with docker and docker-compose set up\n3. Continuously deploy the specified pull requests and branches, using your docker-compose file(s)\n4. Report the preview instance URL in the GitHub UI\n\nIt is designed to be the **no-nonsense, cheap, and secure** alternative to\nservices that require access to your code and force your app to fit within\ntheir specific deployment system and/or require a specific config file.\n\n\u003cimg src=\"img/2-add-label.png\"\u003e\n\u003cimg src=\"img/3-deploy-starts.png\"\u003e\n\u003cimg src=\"img/5-view-deployment.png\"\u003e\n\u003cimg src=\"img/6-deploy-next-commit-pending.png\"\u003e\n\n## Useful for the entire team\n\n- **Product Owners**: Interact with a new feature as it's built, give valuable feedback earlier, reduce wasted development time.\n- **Developers**: Show your work in progress, find bugs early, deliver the right feature.\n- **Ops**: Concentrate on high value tasks, not maintaining staging environments.\n- **CTOs**: Don't let your code run on third-party servers: your code always stays private on either GitHub's or your servers.\n\n## Features\n\nPreview environments that:\n\n- work with your **existing tooling**: If your app can be started with\n  docker-compose, it can be deployed to preview environments with PullPreview.\n\n- can be **started and destroyed easily**: You can manage preview environments\n  by adding or removing the `pullpreview` label on your Pull Requests. You can\n  set specific branches as always on, for instance to continuously deploy your\n  master branch.\n\n- are **cheap too run**: Preview environments are launched on AWS Lightsail\n  instances, which are both very cheap (10USD per month, proratized to the\n  duration of the PR), and all costs included (bandwith, storage, etc.)\n\n- take the **privacy** of your code seriously: The workflow happens all within\n  a GitHub Action, which means your code never leaves GitHub or your Lightsail\n  instances.\n\n- make the preview URL **easy to find** for your reviewers: Deployment statuses\n  and URLs are visible in the PR checks section, and on the Deployments tab in\n  the GitHub UI.\n\n- **persist state** across deploys: Any state stored in docker volumes (e.g.\n  database data) will be persisted across deploys, making the life of reviewers\n  easier.\n\n- are **easy to troubleshoot**: You can give specific GitHub users the\n  authorization to SSH into the preview instance (with sudo privileges) to\n  further troubleshoot any issue. The SSH keys that they use to push to GitHub\n  will automatically be installed on the preview servers.\n\n- are **integrated into the GitHub UI**: Logs for each deployment run are\n  available within the Actions section, and direct links to the preview\n  environments are available in the Checks section of a PR, and in the\n  Deployments tab of the repository.\n\n\u003cimg src=\"img/4-view-logs.png\" /\u003e\n\u003cimg src=\"img/8-list-deployments.png\" /\u003e\n\n## Installation \u0026 Usage\n\n- [Getting Started](https://github.com/pullpreview/action/wiki/Getting-Started)\n- Action [Inputs](https://github.com/pullpreview/action/wiki/Inputs) / [Outputs](https://github.com/pullpreview/action/wiki/Outputs)\n- Handling [Seed Data](https://github.com/pullpreview/action/wiki/Seed-Data)\n- [Workflow Examples](https://github.com/pullpreview/action/wiki/Workflow-Examples)\n- [FAQ](https://github.com/pullpreview/action/wiki/FAQ)\n\n\u0026rarr; Please see the [wiki](https://github.com/pullpreview/action/wiki) for the full documentation.\n\n## Example\n\nWorkflow file with the `master` branch always on:\n\n```yaml\n# .github/workflows/pullpreview.yml\nname: PullPreview\non:\n  # the schedule is optional, but helps to make sure no dangling resources are left when GitHub Action does not behave properly\n  schedule:\n    - cron: \"30 2 * * *\"\n  push:\n    branches:\n      - main\n  pull_request:\n    types: [labeled, unlabeled, synchronize, closed, reopened]\n\njobs:\n  deploy:\n    if: github.event_name == 'schedule' || github.event_name == 'push' || github.event.label.name == 'pullpreview' || contains(github.event.pull_request.labels.*.name, 'pullpreview')\n    runs-on: ubuntu-latest\n    timeout-minutes: 30\n    steps:\n      - uses: actions/checkout@v4\n      - uses: pullpreview/action@v5\n        with:\n          # Those GitHub users will have SSH access to the servers\n          admins: crohr,other-github-user\n          # A preview environment will always exist for the main branch\n          always_on: main\n          # Use the cidrs option to restrict access to the live environments to specific IP ranges\n          cidrs: \"0.0.0.0/0\"\n          # PullPreview will use those 2 files when running docker-compose up\n          compose_files: docker-compose.yml,docker-compose.pullpreview.yml\n          # The preview URL will target this port\n          default_port: 80\n          # Use a 512MB RAM instance type instead of the default 2GB\n          instance_type: nano\n          # Ports to open on the server\n          ports: 80,5432\n        env:\n          AWS_ACCESS_KEY_ID: \"${{ secrets.AWS_ACCESS_KEY_ID }}\"\n          AWS_SECRET_ACCESS_KEY: \"${{ secrets.AWS_SECRET_ACCESS_KEY }}\"\n          AWS_REGION: \"us-east-1\"\n```\n\n## Is this free?\n\nThe code for this Action is completely open source, and licensed under the\nProsperity Public License (see LICENSE).\n\nIf you are a non-profit individual, then it is free to run (in that case, please tell me\nso and/or pass the word around!).\n\nIn all other cases, you must buy a license. More details on [pullpreview.com](https://pullpreview.com).\n\nThanks for reading until the end!\n","funding_links":[],"categories":["Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpullpreview%2Faction","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpullpreview%2Faction","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpullpreview%2Faction/lists"}