Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.19.0] - 2026-04-20

### Added
- `IGNORE_APP_RELATIONSHIP` env var. When set, the `app` field in target configs is ignored — targets are no longer triggered just because their corresponding app is tainted (only direct changes, lockfile changes, and tainted workspace imports apply).

## [0.18.1] - 2026-04-13

### Changed
Expand Down Expand Up @@ -257,6 +262,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Multi-stage Docker build
- Automated vendor upgrade workflow

[0.19.0]: https://github.com/gooddata/gooddata-goodchanges/compare/v0.18.1...v0.19.0
[0.18.1]: https://github.com/gooddata/gooddata-goodchanges/compare/v0.18.0...v0.18.1
[0.18.0]: https://github.com/gooddata/gooddata-goodchanges/compare/v0.17.1...v0.18.0
[0.17.1]: https://github.com/gooddata/gooddata-goodchanges/compare/v0.17.0...v0.17.1
Expand Down
19 changes: 10 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,15 @@ JSON array of target objects:

## Environment variables

| Variable | Description | Default |
|------------------|-------------------------------------------------------------------------------------------------------------------------------|-----------------|
| `LOG_LEVEL` | Logging verbosity. `BASIC` for standard logging, `DEBUG` for verbose AST/taint tracing to stderr | _(no logging)_ |
| `INCLUDE_TYPES` | When set to any non-empty value, includes type-only changes (interfaces, type aliases, type annotations) in taint propagation | _(disabled)_ |
| `INCLUDE_CSS` | When set to any non-empty value, enables CSS/SCSS change detection and taint propagation through `@use`/`@import` chains | _(disabled)_ |
| `COMPARE_COMMIT` | Specific git commit hash to compare against (overrides branch-based comparison) | _(empty)_ |
| `COMPARE_BRANCH` | Git branch to compute merge base against | `origin/master` |
| `TARGETS` | Comma-delimited list of target names to include in output. Supports `*` wildcard (e.g. `*backstop*,@gooddata/sdk-*`). | _(all targets)_ |
| Variable | Description | Default |
|---------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|
| `LOG_LEVEL` | Logging verbosity. `BASIC` for standard logging, `DEBUG` for verbose AST/taint tracing to stderr | _(no logging)_ |
| `INCLUDE_TYPES` | When set to any non-empty value, includes type-only changes (interfaces, type aliases, type annotations) in taint propagation | _(disabled)_ |
| `INCLUDE_CSS` | When set to any non-empty value, enables CSS/SCSS change detection and taint propagation through `@use`/`@import` chains | _(disabled)_ |
| `COMPARE_COMMIT` | Specific git commit hash to compare against (overrides branch-based comparison) | _(empty)_ |
| `COMPARE_BRANCH` | Git branch to compute merge base against | `origin/master` |
| `TARGETS` | Comma-delimited list of target names to include in output. Supports `*` wildcard (e.g. `*backstop*,@gooddata/sdk-*`). | _(all targets)_ |
| `IGNORE_APP_RELATIONSHIP` | When set to any non-empty value, ignores the `app` field in target configs. Targets are no longer triggered solely because their corresponding app is tainted. | _(disabled)_ |

## Library vs app detection

Expand Down Expand Up @@ -124,7 +125,7 @@ Each target is triggered by any of these conditions:
1. **Direct file changes** -- files matching `changeDirs` globs changed (excluding ignored paths). Defaults to `**/*` (entire project) when `changeDirs` is not set.
2. **External dependency changes** -- a dependency version changed in `pnpm-lock.yaml`
3. **Tainted workspace imports** -- a file matching `changeDirs` globs imports a tainted symbol from a workspace library
4. **Corresponding app is tainted** -- the app specified by `app` is affected (any of the above conditions)
4. **Corresponding app is tainted** -- the app specified by `app` is affected (any of the above conditions). Disabled when `IGNORE_APP_RELATIONSHIP` env var is set.

### changeDirs

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.18.1
0.19.0
18 changes: 17 additions & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ var version string

var flagIncludeTypes bool
var flagIncludeCSS bool
var flagIgnoreAppRelationship bool
var flagLog bool
var flagDebug bool

Expand Down Expand Up @@ -51,10 +52,25 @@ func main() {
fmt.Println()
os.Exit(0)
}
if arg == "--list" {
rushConfig, err := rush.LoadConfig(".")
if err != nil {
fmt.Fprintf(os.Stderr, "Error loading rush config: %v\n", err)
os.Exit(1)
}
data, err := json.MarshalIndent(rushConfig.Projects, "", " ")
if err != nil {
fmt.Fprintf(os.Stderr, "Error marshalling projects: %v\n", err)
os.Exit(1)
}
fmt.Println(string(data))
os.Exit(0)
}
}

flagIncludeTypes = envBool("INCLUDE_TYPES")
flagIncludeCSS = envBool("INCLUDE_CSS")
flagIgnoreAppRelationship = envBool("IGNORE_APP_RELATIONSHIP")

logLevel := strings.ToUpper(os.Getenv("LOG_LEVEL"))
flagLog = logLevel == "BASIC" || logLevel == "DEBUG"
Expand Down Expand Up @@ -392,7 +408,7 @@ func main() {
}

// Quick check: app taint
if td.App != nil {
if td.App != nil && !flagIgnoreAppRelationship {
appInfo := projectMap[*td.App]
if appInfo != nil {
if changedProjects[*td.App] != nil {
Expand Down
Loading