Skip to content

Conversation

@eeeebbbbrrrr
Copy link
Contributor

This teaches the test framework.rs to pass through to sudo all the various cargo/rust environment variables.

Turns out this might be necessary for #[pg_test] tests that use std::env::var(...). When using --runas we spawn the postmaster with sudo, and its default policy is to reset the environment (env_reset flag in the sudoers file).

@eeeebbbbrrrr
Copy link
Contributor Author

we're now doing the latter version:

$ FOO=bar sudo -u testuser printenv FOO
$ sudo -u testuser FOO=bar printenv FOO
bar

Copy link
Member

@workingjubilee workingjubilee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks plausible but it seems like we could avoid most of this logic if we use sudo's flags more fully.

Comment on lines +552 to +556
var.starts_with("CARGO")
|| var.starts_with("RUST")
|| var.starts_with("DEP_")
|| ["OUT_DIR", "TARGET", "HOST", "NUM_JOBS", "OPT_LEVEL", "DEBUG", "PROFILE"]
.contains(&var)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm, regex maybe?

// This ensures that in-process #[pg_test]s will see the `CARGO_xxx` envars they expect
for (var, value) in std::env::vars() {
if accept_envar(&var) {
let env_as_arg = format!("{var}={}", shlex::try_quote(&value)?);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if we use shlex, we should just skip the env vars that we can't quote the values of correctly, or we should panic more noisily, or we should stop iterating the env vars entirely. here is one of those options.

Suggested change
let env_as_arg = format!("{var}={}", shlex::try_quote(&value)?);
let Ok(quoted_val) = shlex::try_quote(&value) else {
continue
};
let env_as_arg = format!("{var}={quoted_val}");

Comment on lines +565 to +570
for (var, value) in std::env::vars() {
if accept_envar(&var) {
let env_as_arg = format!("{var}={}", shlex::try_quote(&value)?);
cmd.arg(env_as_arg);
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

alternatively, instead of splitting and then reapplying these, why not use sudo's --preserve-env=var,var,var,...? are we worried about not having the required privilege?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn’t see that in the man page. Let me investigate that and make sure we can rely on it even being there here in 2023.

@workingjubilee
Copy link
Member

Needs a rebase, unforch.

@eeeebbbbrrrr eeeebbbbrrrr added the mergable This PR can be merged label Feb 24, 2025
This teaches the test `framework.rs` to pass through to `sudo` all the
various cargo/rust environment variables.

Turns out this might be necessary for `#[pg_test]` tests that use
`std::env::var(...)`.  When using `--runas` we spawn the postmaster with
`sudo`, and its default policy is to reset the environment (`env_reset`
flag in the sudoers file).
@eeeebbbbrrrr eeeebbbbrrrr merged commit 5f29cae into pgcentralfoundation:develop Feb 24, 2025
3 of 4 checks passed
eeeebbbbrrrr added a commit that referenced this pull request Feb 24, 2025
Welcome to pgrx v0.13.0. The first update in a little bit, which makes
pgrx current with upstream dependencies, rust 1.85.0 (but not 2024
Edition, yet), and a slew of fixes and cleanups and community
contributions.

# Upgrading

You'll need to `cargo install cargo-pgrx --version 0.13.0 --locked` to
get the latest `cargo-pgrx` tool, and then you can run `cargo pgrx
upgrade` in your extension crates to update their dependencies.

# Breaking Changes

Generally, the only breaking changes in v0.13.0 are related to the
user-facing SPI APIs. In general, SPI functions that previously took a
Vec of Arguments now take a `&[DatumWithOid]`, with proper lifetime
bounds. This is a fairly straightforward, boilerplate to update to.

@YohDeadfall has done a lot of work on improving SPI's safety and it's
greatly appreciated!

# What's Changed

## `cargo-pgrx`

* fix a deadlock in `cargo pgrx install` during `get_git_hash()` by
@eeeebbbbrrrr in #1935
* `cargo pgrx test --runas` envar passing by @eeeebbbbrrrr in
#1674
* Search for sql upgrade scripts relative to the package manifest by
@tristan957 in #1979

## Build System

* use `allowlist_file` for bindgen by @usamoi in
#1922
* add `pg_config --libdir` to linker search path by @usamoi in
#1932
* lock patch version of pgrx-bindgen by @usamoi in
#1939
* Introduce a blocklist of "yanked" Postgres versions by @eeeebbbbrrrr
in #1950
* Make sure bindgen gets the cppflags even if we aren't using macOS by
@thomcc in #1336

## SPI

* Made SPI query arguments type safe by @YohDeadfall in
#1858
* Changed args of prepare methods to be slices by @YohDeadfall in
#1933
* Added connect_mut for data changing SPI operations by @YohDeadfall in
#1913

## General `pgrx-pg-sys` Interfaces

* Allow creating Oid from a u32 in a const context by @syvb in
#1943
* Add utils/acl.h by @daamien in
#1945
* Add catalog/catalog.h by @daamien in
#1946
* Added `oids_of!` macro by @YohDeadfall in
#1879
* Port `bufpage.h` functions by @rebasedming in
#1982

## Bug Fixes

* Check wakeup_flags from `wait_latch` function to exit on
`WL_POSTMASTER_DEATH` by @var77 in
#1938


## Overall Code Cleanup

* refactor: remove redundant references (`&`) by @hamirmahal in
#1941
* fix warnings by @usamoi in
#1948
* Updating readme.md by @ChronicallyJD in
#1949
* style: simplify some statements for readability by @hamirmahal in
#1962
* docs: fix pgx info in cargo-pgrx README by @mrdrivingduck in
#1953
* Updated expected UI test outputs by @YohDeadfall in
#1981
* Fix "about" info for cross subcommand by @mjgarton in
#1974
* update dependencies and fix compilation issues by @eeeebbbbrrrr in
#1983

# Thanks!

Thanks to the community, past, present, and future. Especially to our
new contributors...

# New Contributors
* @var77 made their first contribution in
#1938
* @ChronicallyJD made their first contribution in
#1949
* @mrdrivingduck made their first contribution in
#1953
* @tristan957 made their first contribution in
#1979
* @mjgarton made their first contribution in
#1974

**Full Changelog**:
v0.12.7...v0.13.0
usamoi pushed a commit to tensorchord/pgrx that referenced this pull request Mar 6, 2025
This teaches the test `framework.rs` to pass through to `sudo` all the
various cargo/rust environment variables.

Turns out this might be necessary for `#[pg_test]` tests that use
`std::env::var(...)`. When using `--runas` we spawn the postmaster with
`sudo`, and its default policy is to reset the environment (`env_reset`
flag in the sudoers file).
usamoi pushed a commit to tensorchord/pgrx that referenced this pull request Mar 6, 2025
Welcome to pgrx v0.13.0. The first update in a little bit, which makes
pgrx current with upstream dependencies, rust 1.85.0 (but not 2024
Edition, yet), and a slew of fixes and cleanups and community
contributions.

# Upgrading

You'll need to `cargo install cargo-pgrx --version 0.13.0 --locked` to
get the latest `cargo-pgrx` tool, and then you can run `cargo pgrx
upgrade` in your extension crates to update their dependencies.

# Breaking Changes

Generally, the only breaking changes in v0.13.0 are related to the
user-facing SPI APIs. In general, SPI functions that previously took a
Vec of Arguments now take a `&[DatumWithOid]`, with proper lifetime
bounds. This is a fairly straightforward, boilerplate to update to.

@YohDeadfall has done a lot of work on improving SPI's safety and it's
greatly appreciated!

# What's Changed

## `cargo-pgrx`

* fix a deadlock in `cargo pgrx install` during `get_git_hash()` by
@eeeebbbbrrrr in pgcentralfoundation#1935
* `cargo pgrx test --runas` envar passing by @eeeebbbbrrrr in
pgcentralfoundation#1674
* Search for sql upgrade scripts relative to the package manifest by
@tristan957 in pgcentralfoundation#1979

## Build System

* use `allowlist_file` for bindgen by @usamoi in
pgcentralfoundation#1922
* add `pg_config --libdir` to linker search path by @usamoi in
pgcentralfoundation#1932
* lock patch version of pgrx-bindgen by @usamoi in
pgcentralfoundation#1939
* Introduce a blocklist of "yanked" Postgres versions by @eeeebbbbrrrr
in pgcentralfoundation#1950
* Make sure bindgen gets the cppflags even if we aren't using macOS by
@thomcc in pgcentralfoundation#1336

## SPI

* Made SPI query arguments type safe by @YohDeadfall in
pgcentralfoundation#1858
* Changed args of prepare methods to be slices by @YohDeadfall in
pgcentralfoundation#1933
* Added connect_mut for data changing SPI operations by @YohDeadfall in
pgcentralfoundation#1913

## General `pgrx-pg-sys` Interfaces

* Allow creating Oid from a u32 in a const context by @syvb in
pgcentralfoundation#1943
* Add utils/acl.h by @daamien in
pgcentralfoundation#1945
* Add catalog/catalog.h by @daamien in
pgcentralfoundation#1946
* Added `oids_of!` macro by @YohDeadfall in
pgcentralfoundation#1879
* Port `bufpage.h` functions by @rebasedming in
pgcentralfoundation#1982

## Bug Fixes

* Check wakeup_flags from `wait_latch` function to exit on
`WL_POSTMASTER_DEATH` by @var77 in
pgcentralfoundation#1938


## Overall Code Cleanup

* refactor: remove redundant references (`&`) by @hamirmahal in
pgcentralfoundation#1941
* fix warnings by @usamoi in
pgcentralfoundation#1948
* Updating readme.md by @ChronicallyJD in
pgcentralfoundation#1949
* style: simplify some statements for readability by @hamirmahal in
pgcentralfoundation#1962
* docs: fix pgx info in cargo-pgrx README by @mrdrivingduck in
pgcentralfoundation#1953
* Updated expected UI test outputs by @YohDeadfall in
pgcentralfoundation#1981
* Fix "about" info for cross subcommand by @mjgarton in
pgcentralfoundation#1974
* update dependencies and fix compilation issues by @eeeebbbbrrrr in
pgcentralfoundation#1983

# Thanks!

Thanks to the community, past, present, and future. Especially to our
new contributors...

# New Contributors
* @var77 made their first contribution in
pgcentralfoundation#1938
* @ChronicallyJD made their first contribution in
pgcentralfoundation#1949
* @mrdrivingduck made their first contribution in
pgcentralfoundation#1953
* @tristan957 made their first contribution in
pgcentralfoundation#1979
* @mjgarton made their first contribution in
pgcentralfoundation#1974

**Full Changelog**:
pgcentralfoundation/pgrx@v0.12.7...v0.13.0
KenjiBrown pushed a commit to SoftwareLibreMx/pgrx that referenced this pull request May 27, 2025
This teaches the test `framework.rs` to pass through to `sudo` all the
various cargo/rust environment variables.

Turns out this might be necessary for `#[pg_test]` tests that use
`std::env::var(...)`. When using `--runas` we spawn the postmaster with
`sudo`, and its default policy is to reset the environment (`env_reset`
flag in the sudoers file).
KenjiBrown pushed a commit to SoftwareLibreMx/pgrx that referenced this pull request May 27, 2025
Welcome to pgrx v0.13.0. The first update in a little bit, which makes
pgrx current with upstream dependencies, rust 1.85.0 (but not 2024
Edition, yet), and a slew of fixes and cleanups and community
contributions.

# Upgrading

You'll need to `cargo install cargo-pgrx --version 0.13.0 --locked` to
get the latest `cargo-pgrx` tool, and then you can run `cargo pgrx
upgrade` in your extension crates to update their dependencies.

# Breaking Changes

Generally, the only breaking changes in v0.13.0 are related to the
user-facing SPI APIs. In general, SPI functions that previously took a
Vec of Arguments now take a `&[DatumWithOid]`, with proper lifetime
bounds. This is a fairly straightforward, boilerplate to update to.

@YohDeadfall has done a lot of work on improving SPI's safety and it's
greatly appreciated!

# What's Changed

## `cargo-pgrx`

* fix a deadlock in `cargo pgrx install` during `get_git_hash()` by
@eeeebbbbrrrr in pgcentralfoundation#1935
* `cargo pgrx test --runas` envar passing by @eeeebbbbrrrr in
pgcentralfoundation#1674
* Search for sql upgrade scripts relative to the package manifest by
@tristan957 in pgcentralfoundation#1979

## Build System

* use `allowlist_file` for bindgen by @usamoi in
pgcentralfoundation#1922
* add `pg_config --libdir` to linker search path by @usamoi in
pgcentralfoundation#1932
* lock patch version of pgrx-bindgen by @usamoi in
pgcentralfoundation#1939
* Introduce a blocklist of "yanked" Postgres versions by @eeeebbbbrrrr
in pgcentralfoundation#1950
* Make sure bindgen gets the cppflags even if we aren't using macOS by
@thomcc in pgcentralfoundation#1336

## SPI

* Made SPI query arguments type safe by @YohDeadfall in
pgcentralfoundation#1858
* Changed args of prepare methods to be slices by @YohDeadfall in
pgcentralfoundation#1933
* Added connect_mut for data changing SPI operations by @YohDeadfall in
pgcentralfoundation#1913

## General `pgrx-pg-sys` Interfaces

* Allow creating Oid from a u32 in a const context by @syvb in
pgcentralfoundation#1943
* Add utils/acl.h by @daamien in
pgcentralfoundation#1945
* Add catalog/catalog.h by @daamien in
pgcentralfoundation#1946
* Added `oids_of!` macro by @YohDeadfall in
pgcentralfoundation#1879
* Port `bufpage.h` functions by @rebasedming in
pgcentralfoundation#1982

## Bug Fixes

* Check wakeup_flags from `wait_latch` function to exit on
`WL_POSTMASTER_DEATH` by @var77 in
pgcentralfoundation#1938


## Overall Code Cleanup

* refactor: remove redundant references (`&`) by @hamirmahal in
pgcentralfoundation#1941
* fix warnings by @usamoi in
pgcentralfoundation#1948
* Updating readme.md by @ChronicallyJD in
pgcentralfoundation#1949
* style: simplify some statements for readability by @hamirmahal in
pgcentralfoundation#1962
* docs: fix pgx info in cargo-pgrx README by @mrdrivingduck in
pgcentralfoundation#1953
* Updated expected UI test outputs by @YohDeadfall in
pgcentralfoundation#1981
* Fix "about" info for cross subcommand by @mjgarton in
pgcentralfoundation#1974
* update dependencies and fix compilation issues by @eeeebbbbrrrr in
pgcentralfoundation#1983

# Thanks!

Thanks to the community, past, present, and future. Especially to our
new contributors...

# New Contributors
* @var77 made their first contribution in
pgcentralfoundation#1938
* @ChronicallyJD made their first contribution in
pgcentralfoundation#1949
* @mrdrivingduck made their first contribution in
pgcentralfoundation#1953
* @tristan957 made their first contribution in
pgcentralfoundation#1979
* @mjgarton made their first contribution in
pgcentralfoundation#1974

**Full Changelog**:
pgcentralfoundation/pgrx@v0.12.7...v0.13.0
daamien pushed a commit to daamien/pgrx that referenced this pull request Dec 15, 2025
This teaches the test `framework.rs` to pass through to `sudo` all the
various cargo/rust environment variables.

Turns out this might be necessary for `#[pg_test]` tests that use
`std::env::var(...)`. When using `--runas` we spawn the postmaster with
`sudo`, and its default policy is to reset the environment (`env_reset`
flag in the sudoers file).
daamien pushed a commit to daamien/pgrx that referenced this pull request Dec 15, 2025
Welcome to pgrx v0.13.0. The first update in a little bit, which makes
pgrx current with upstream dependencies, rust 1.85.0 (but not 2024
Edition, yet), and a slew of fixes and cleanups and community
contributions.

# Upgrading

You'll need to `cargo install cargo-pgrx --version 0.13.0 --locked` to
get the latest `cargo-pgrx` tool, and then you can run `cargo pgrx
upgrade` in your extension crates to update their dependencies.

# Breaking Changes

Generally, the only breaking changes in v0.13.0 are related to the
user-facing SPI APIs. In general, SPI functions that previously took a
Vec of Arguments now take a `&[DatumWithOid]`, with proper lifetime
bounds. This is a fairly straightforward, boilerplate to update to.

@YohDeadfall has done a lot of work on improving SPI's safety and it's
greatly appreciated!

# What's Changed

## `cargo-pgrx`

* fix a deadlock in `cargo pgrx install` during `get_git_hash()` by
@eeeebbbbrrrr in pgcentralfoundation#1935
* `cargo pgrx test --runas` envar passing by @eeeebbbbrrrr in
pgcentralfoundation#1674
* Search for sql upgrade scripts relative to the package manifest by
@tristan957 in pgcentralfoundation#1979

## Build System

* use `allowlist_file` for bindgen by @usamoi in
pgcentralfoundation#1922
* add `pg_config --libdir` to linker search path by @usamoi in
pgcentralfoundation#1932
* lock patch version of pgrx-bindgen by @usamoi in
pgcentralfoundation#1939
* Introduce a blocklist of "yanked" Postgres versions by @eeeebbbbrrrr
in pgcentralfoundation#1950
* Make sure bindgen gets the cppflags even if we aren't using macOS by
@thomcc in pgcentralfoundation#1336

## SPI

* Made SPI query arguments type safe by @YohDeadfall in
pgcentralfoundation#1858
* Changed args of prepare methods to be slices by @YohDeadfall in
pgcentralfoundation#1933
* Added connect_mut for data changing SPI operations by @YohDeadfall in
pgcentralfoundation#1913

## General `pgrx-pg-sys` Interfaces

* Allow creating Oid from a u32 in a const context by @syvb in
pgcentralfoundation#1943
* Add utils/acl.h by @daamien in
pgcentralfoundation#1945
* Add catalog/catalog.h by @daamien in
pgcentralfoundation#1946
* Added `oids_of!` macro by @YohDeadfall in
pgcentralfoundation#1879
* Port `bufpage.h` functions by @rebasedming in
pgcentralfoundation#1982

## Bug Fixes

* Check wakeup_flags from `wait_latch` function to exit on
`WL_POSTMASTER_DEATH` by @var77 in
pgcentralfoundation#1938


## Overall Code Cleanup

* refactor: remove redundant references (`&`) by @hamirmahal in
pgcentralfoundation#1941
* fix warnings by @usamoi in
pgcentralfoundation#1948
* Updating readme.md by @ChronicallyJD in
pgcentralfoundation#1949
* style: simplify some statements for readability by @hamirmahal in
pgcentralfoundation#1962
* docs: fix pgx info in cargo-pgrx README by @mrdrivingduck in
pgcentralfoundation#1953
* Updated expected UI test outputs by @YohDeadfall in
pgcentralfoundation#1981
* Fix "about" info for cross subcommand by @mjgarton in
pgcentralfoundation#1974
* update dependencies and fix compilation issues by @eeeebbbbrrrr in
pgcentralfoundation#1983

# Thanks!

Thanks to the community, past, present, and future. Especially to our
new contributors...

# New Contributors
* @var77 made their first contribution in
pgcentralfoundation#1938
* @ChronicallyJD made their first contribution in
pgcentralfoundation#1949
* @mrdrivingduck made their first contribution in
pgcentralfoundation#1953
* @tristan957 made their first contribution in
pgcentralfoundation#1979
* @mjgarton made their first contribution in
pgcentralfoundation#1974

**Full Changelog**:
pgcentralfoundation/pgrx@v0.12.7...v0.13.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

mergable This PR can be merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants