diff --git a/.github/workflows/compare.yml b/.github/workflows/compare.yml index b3d8640..7785c34 100644 --- a/.github/workflows/compare.yml +++ b/.github/workflows/compare.yml @@ -1 +1,32 @@ -on +on: [push, pull_request] + +jobs: + compare-bmizerany-setup-postgres: + runs-on: ubuntu-22.04 + steps: + - name: checkout + uses: actions/checkout@v4 + - name: time bmizerany/setup-postgres + uses: ./ + with: + version: 16.4.0 + compare-postgres-container: + runs-on: ubuntu-22.04 + services: + postgres: + image: postgres:16 + steps: + - name: checkout + uses: actions/checkout@v4 # Checkout for inclusing in rough overall time comparisons + - name: time postgres container + run: echo "See output/time from 'Initialize containers' above" + compare-apt-setup-postgres: + runs-on: ubuntu-22.04 + steps: + - name: apt-get postgres + uses: actions/checkout@v4 + id: postgres + - name: time apt-get action + uses: ikalnytskyi/action-setup-postgres@v7 + with: + postgres-version: 16 diff --git a/README.md b/README.md index d44a01c..db23d22 100644 --- a/README.md +++ b/README.md @@ -1,106 +1,100 @@ # setup-postgres -Fast (really fast), cross-platform, unconfined setup for Postgres in GitHub Actions. +Lightning-fast Postgres setup for GitHub Actions that just works. Cross-platform, unconfined, and ready for all environments GitHub Actions supports. -Works for all OSs and architectures supported by GitHub Actions! +Install Times # Features -- [x] Binaries installed, in PATH, fast! -- [x] Starts postgres in fast-mode*, fast! -- [x] Environment variables setup for use in steps, fast! +- **Pure Speed**: Binary-based installation that gets you running in seconds +- **Zero Friction**: No Docker, no package managers - just what you need +- **Universal**: Works across every OS and architecture GitHub Actions supports +- **No yaml hassle**: Environment variables pre-configured for immediate use in following steps, without intermediate yaml -No Docker, no non-portable package managers. Just the binaries you need, -installed and ready to go, fast! - -# Usage +# Get Started ```yaml steps: - # ... - uses: bmizerany/setup-postgres@v3 - - # Run your migrations, tests, etc. + + # Your steps here - run: psql 'SELECT 1' - run: go test ./... - run: bun test - # ... ``` -That's it! +That's all it takes. No configuration needed. -## Supported OSs and Architectures +# Core Features -This action supports all OSs and architectures that GitHub actions supports; at -the time of writing. +## Version Support -## Supported Versions +The default version is `17.2.0`. -A version may be specified in the form of `X.Y.Z` where `X`, `Y`, and `Z` are -integers. The version must be a valid version of postgres that is available -from the [embedded postgres project](https://github.com/zonkyio/embedded-postgres). +Install any Postgres version using standard semantic versioning (`X.Y.Z`). We pull directly from the embedded-postgres project's verified binaries. -A list of supported versions can be found [here](https://repo1.maven.org/maven2/io/zonky/test/postgres/embedded-postgres-binaries-linux-amd64/). +Browse available versions [here](https://repo1.maven.org/maven2/io/zonky/test/postgres/embedded-postgres-binaries-linux-amd64/). -## Environment variables +Versions can be specified using the version input: -The action will set the following environment variables for subsequent steps: - -| Name | Description | -| --- | --- | -| `PGHOST` | The host to connect to (default: `localhost`) | -| `PGPORT` | The port to connect to (default: `5432`) | -| `PGUSER` | The user to connect as (default: `postgres`) | -| `PGPASSWORD` | The password to connect with (default: `postgres`) | -| `PGDATABASE` | The database to connect to (default: `postgres`) | -| `PGDATA` | The data directory for the running postgres instance | -| `DATABASE_URL` | The DSN that can be used to connect to the database | +```yaml +steps: + - uses: bmizerany/setup-postgres@v3 + with: + version: 16.4.0 +``` -> NOTE: `DATABASE_URL` is in the DSN form (e.g. `dbname=postgres user=postgres -> ...`) which is accepted my most Postgres clients, drivers, ORMs, etc. It -> was chosen over an actual URL because it is more flexible, and easier to -> override settings by simply appending new settings to the string. -> -> Users that want a URL can build one like: `postgres://$PGUSER:$PGPASSWORD@$PGHOST:$PGPORT/$PGDATABASE` +## Environment Configuration +Your workflow steps automatically get these environment variables: +| Variable | Purpose | Default | +| --- | --- | --- | +| `PGHOST` | Connection host | `localhost` | +| `PGPORT` | Connection port | `5432` | +| `PGUSER` | Username | `postgres` | +| `PGPASSWORD` | Password | `postgres` | +| `PGDATABASE` | Target database | `postgres` | +| `PGDATA` | Data directory | *runtime path* | +| `DATABASE_URL` | Connection string | DSN format | + +The `DATABASE_URL` uses DSN format for maximum flexibility. For URL format, construct it like this: +``` +postgres://$PGUSER:$PGPASSWORD@$PGHOST:$PGPORT/$PGDATABASE +``` -## Inputs +## Configuration Options -| Name | Description | Default | +### Inputs +| Name | Purpose | Default | | --- | --- | --- | -| `version` | The version of postgres to install | `17.2.0` | +| `version` | Postgres version | `17.2.0` | -## Outputs +### Outputs +For advanced workflow configuration: -Outputs are provided for use in configuring other steps in a workflow. It is -assumed most users will not need them for normal use, and instead can rely on -the environment variables set by this action. - -| Name | Description | +| Name | Purpose | | --- | --- | -| `dsn` | The DSN that can be used to connect to the database | -| `data` | The data directory for the running postgres instance | - -## Fast-mode +| `dsn` | Database connection string | +| `data` | Postgres data directory | -This action runs postgres in "fast-mode" which is a mode that disables `fsync` -and `full_page_writes`. This is not recommended for production use, but is great -for CI/CD environments where you want to get up and running quickly, and for -tests to run lightning fast. +# Performance Notes -# Credits +This action runs Postgres in fast mode, disabling `fsync` and `full_page_writes`. Perfect for CI/CD, not recommended for production. Your tests will fly. -This is possible thanks to the [embedded postgres project](https://github.com/zonkyio/embedded-postgres) -which provides pre-built binaries for many versions of postgres. Please -consider supporting them if you find this action useful. +# Acknowledgments -This is obviously most possible because of the hard work of the postgres -community. Thank you! +Built on the shoulders of giants: +- [embedded postgres project](https://github.com/zonkyio/embedded-postgres) for their essential binary distributions +- The Postgres community for their foundational work # Contributing -Please open an issue for any feature requests, bugs, or questions. Large PRs -(e.g. new features) should be discussed in an issue first. Small PRs for bug -fixes, typos, etc are welcome without an issue. +We value collaboration: +- Open issues for features and bugs +- Discuss major changes before PR +- Small fixes welcome anytime +- Be kind, or else + +--- -Also, be nice, or else. +*Note: This project thrives because of community support. Consider supporting the embedded postgres project if you find value here.*​​​​​​​​​​​​​​​​ diff --git a/action.yml b/action.yml index 45bb3e0..013ce98 100644 --- a/action.yml +++ b/action.yml @@ -1,13 +1,13 @@ -name: 'Embedded Postgres' -description: 'From zero to testing with embedded postgres in nearly no time, literally.' +name: 'Install Postgres' +description: 'The fastest way to install Postgres for your GitHub Actions.' inputs: version: - description: 'The version of the embedded postgres to install.' + description: 'The version of postgres to install. Use the format ... All parts are required.' required: true default: '17.2.0' outputs: dsn: - description: 'The DSN for connecting to the embedded postgres (e.g. psql "$DSN").' + description: 'The DSN for connecting to the embedded postgres.' data: description: 'The path to the data directory of the embedded postgres.' runs: diff --git a/bar.png b/bar.png new file mode 100644 index 0000000..616e919 Binary files /dev/null and b/bar.png differ