Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add export-creds command to the CLI #7398

Merged
merged 10 commits into from
Nov 16, 2022
Merged

Add export-creds command to the CLI #7398

merged 10 commits into from
Nov 16, 2022

Conversation

jamesls
Copy link
Member

@jamesls jamesls commented Nov 2, 2022

This PR builds on the interface proposed in #6808 and implements the additional features proposed in #7388.

From the original PRs, the additional features are:

  • Added support for an explicit --format args to control the output format.
  • Add support for env vars, powershell/windows vars, and a JSON format that's enables this command to be used as a credential_process.
  • Detect, and prevent infinite recursion when the credential process resolution results in the CLI calling itself with the same command.

Closes #7388
Closes #5261

This PR builds on the interface proposed in aws#6808 and implements
the additional features proposed in aws#7388.

From the original PRs, the additional features are:

* Added support for an explicit `--format` args to control the output
  format.
* Add support for env vars, powershell/windows vars, and a JSON format
  that's enables this command to be used as a `credential_process`.
* Detect, and prevent infinite recursion when the credential process
  resolution results in the CLI calling itself with the same command.

Closes aws#7388
Closes aws#5261
@codecov-commenter
Copy link

codecov-commenter commented Nov 2, 2022

Codecov Report

Merging #7398 (3ce9534) into v2 (ecbb197) will increase coverage by 0.01%.
The diff coverage is 96.12%.

❗ Current head 3ce9534 differs from pull request most recent head 59ebc9c. Consider uploading reports for the commit 59ebc9c to get more accurate results

@@            Coverage Diff             @@
##               v2    #7398      +/-   ##
==========================================
+ Coverage   93.70%   93.72%   +0.01%     
==========================================
  Files         351      352       +1     
  Lines       36175    36306     +131     
  Branches     5202     5221      +19     
==========================================
+ Hits        33899    34028     +129     
  Misses       1652     1652              
- Partials      624      626       +2     
Impacted Files Coverage Δ
awscli/customizations/configure/exportcreds.py 96.09% <96.09%> (ø)
awscli/customizations/configure/configure.py 100.00% <100.00%> (ø)
awscli/s3transfer/compat.py 86.84% <0.00%> (-5.27%) ⬇️
awscli/botocore/credentials.py 97.39% <0.00%> (-0.11%) ⬇️
awscli/help.py 96.03% <0.00%> (+0.03%) ⬆️
awscli/customizations/commands.py 98.77% <0.00%> (+0.81%) ⬆️
awscli/s3transfer/tasks.py 95.00% <0.00%> (+3.33%) ⬆️

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

There's a reasonable scenario where at least two levels of recursion
is reasonable.  Specifically if a user explicitly runs the
`aws configure export-creds` command with a profile that uses
a `credential_process` with a value of
`aws configure export-creds --profile other-profile`.

To handle this I've modified the env var to now track the stack of
profiles seen and ensure there's no cycles given the current profile.

I also added a final safeguard of a general recursion limit of 4.
I figured that 2 levels has valid real world scenarios, we'll give one
more level as a buffer, so fail at 4.

I don't feel super strongly about the hard limit, my rationale being
if a user wants to configure some long `export-creds` chain of 10,
it's their configuration so let them, but I can't come up with a valid
scenario where yuo'd want more than 4.  However, I'd be cool with
removing the hard limit if we don't think it's necessary.
@jamesls
Copy link
Member Author

jamesls commented Nov 9, 2022

Pushed an udpate to add more lenient recursion detection

There's a reasonable scenario where at least two levels of recursion
is reasonable. Specifically if a user explicitly runs the
aws configure export-creds command with a profile that uses
a credential_process with a value of
aws configure export-creds --profile other-profile.

To handle this I've modified the env var to now track the stack of
profiles seen and ensure there's no cycles given the current profile.

I also added a final safeguard of a general recursion limit of 4.
I figured that 2 levels has valid real world scenarios, we'll give one
more level as a buffer, so fail at 4.

I don't feel super strongly about the hard limit, my rationale being
if a user wants to configure some long export-creds chain of 10 profiles,
it's their configuration so let them, but I can't come up with a valid
scenario where you'd want more than 4. However, I'd be cool with
removing the hard limit if we don't think it's necessary.

@benkehoe benkehoe mentioned this pull request Nov 15, 2022
2 tasks
@benkehoe
Copy link

benkehoe commented Nov 15, 2022

A couple of comments:

As mentioned by @kyleknap over on the issue, --env should output the basic KEY=VALUE env format, and people can use export $(aws configure export-creds --format env) to export them. A --env-export could be provided for convenience.

The CLI tends towards verbosity, aws configure export-credentials feels more consistent than export-creds.

I think having --format json might be more obvious for people looking for JSON, maybe it could be an option in addition to --format process even though they act the same.

I don't fully understand the recursive profile detection; is it specific to this command or should it be in the credential resolver or something instead?

@kyleknap
Copy link
Contributor

Building on this comment:

I think having --format json might be more obvious for people looking for JSON, maybe it could be an option in addition to --format process even though they act the same.

I'm wondering if it makes sense to just have a --format default that outputs the credentials as if they were a normal CLI output that can be mutated by the --output and --query parameters. So if you were to run this command with all of the defaults, it would be a JSON payload:

aws configure export-creds
{
    "AccessKeyId": "access_key",
    "SecretAccessKey": "secret_key",
    "SessionToken": "token",
    "Expiration": "2023-01-01T00:00:00Z"
}

but then you can then mutate this response to be YAML/text and use --query if you want to pull out a specific value. Then for the --format arg we would just ignore applying --output and --query if the non-default --format value was provided. It seems that could be useful and make the command more reusable.

@benkehoe
Copy link

I'm wondering if it makes sense to just have a --format default that outputs the credentials as if they were a normal CLI output

I think that makes sense.

@@ -69,6 +69,10 @@ def display_credentials(self, credentials):
)
if credentials.token is not None:
output += f'export AWS_SESSION_TOKEN={credentials.token}\n'
if credentials.expiry_time is not None:
output += (
f'export AWS_CREDENTIAL_EXPIRATION={credentials.expiry_time}\n'

Choose a reason for hiding this comment

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

I called this AWS_CREDENTIALS_EXPIRATION with an S in aws-export-credentials, could we make it the same here? https://github.com/benkehoe/aws-export-credentials/blob/0c53fa6afd4123d7a28550919cea85163a067605/aws_export_credentials/aws_export_credentials.py#L228

Copy link
Member Author

Choose a reason for hiding this comment

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

I was basing it off of what's already supported in botocore (boto/botocore#1187). Looks like it's also supported in javascript.

Choose a reason for hiding this comment

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

Oh dang, I missed that when I was implementing it! I'll change aws-export-credentials to conform to it, then.

Choose a reason for hiding this comment

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

Choose a reason for hiding this comment

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

Is there a commensurate aws_credential_expiration value allowed in the profile config? If not, should there be?

Copy link
Contributor

Choose a reason for hiding this comment

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

@benkehoe Thanks for pointing out that the environment variable is not documented there. We will follow up on this to get it documented.

For the a profile config version of AWS_CREDENTIAL_EXPIRATION, the CLI/botocore does not have one. I don't think the other SDKs have one either. It could potentially make sense. We have had internal discussions about it before I believe and I think the biggest concern is around potentially reloading the shared config file and handling any edge cases in reloading the shared config file.

If this is something that you'd like to see, I'd say recommend opening a feature request in the shared SDK GitHub repository to get a discussion going around it: https://github.com/aws/aws-sdk

@jamesls
Copy link
Member Author

jamesls commented Nov 15, 2022

I don't fully understand the recursive profile detection; is it specific to this command or should it be in the credential resolver or something instead?

It happens if you're using the AWS CLI as a credential process (this command) and also running AWS CLI commands. In the base case you could have just this in your ~/.aws/config file:

[default]
credential_process = aws configure export-credentials

So running any CLI command, e.g. aws s3 ls, would result in asking botocore to resolve credentials, in which it invokes aws configure export-credentials, which in turn asks botocore to resolve credentials, which then invokes aws configure export-credentials, etc. until you run out of system resources to spawn more processes.

I initially had it so you could never have the export-credentials call itself, but there is a valid case if you have the CLI configured as a credential process while also specifically running the aws configure export-credentials command, you just can't have any cycles in terms of profiles visited. There's also a cap to the number of recursive calls we'll allow. It does mean that there are certain cases like the config below that won't work, but it doesn't seem like a realistic scenario we'd want to encourage in the first place.

Running: aws configure export-creds --profile cycle-a with the following config will error out:

[profile cycle-base]
aws_access_key_id = access_key
aws_secret_access_key = secret_key

[profile cycle-a]
credential_process = aws configure export-creds --profile cycle-b

[profile cycle-b]
credential_process = aws configure export-creds --profile cycle-c

[profile cycle-c]
credential_process = aws configure export-creds --profile cycle-d

[profile cycle-d]
credential_process = aws configure export-creds --profile cycle-base

As mentioned by @kyleknap #7388 (comment), --env should output the basic KEY=VALUE env format, and people can use export $(aws configure export-creds --format env) to export them. A --env-export could be provided for convenience.

I can see supporting both, the only question I have is if it's env and env-export or env and env-no-export (or whatever name). Things to consider:

  1. Matching the expectations in the various consoles that give you temp creds (sso, etc.) their default env vars are exported.
  2. We're also adding windows formats such as powershell, and $Env:AWS_ACCESS_KEY_ID behaves like the export AWS_ACCESS_KEY_ID variant in bash so we might consider consistent behavior/naming across OSes.

The CLI tends towards verbosity, aws configure export-credentials feels more consistent than export-creds.

Yeah makes sense, I'll update.

@benkehoe
Copy link

I can see supporting both, the only question I have is if it's env and env-export or env and env-no-export (or whatever name).

Could go explicit for both, something like env-raw and env-export

Copy link
Contributor

@kyleknap kyleknap left a comment

Choose a reason for hiding this comment

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

Looks good! Just left some comments. I also tried it out in powershell and Windows CMD and it was working well there too with regards to consuming their respective formats.

.changes/next-release/feature-credentials-32931.json Outdated Show resolved Hide resolved
awscli/customizations/configure/exportcreds.py Outdated Show resolved Hide resolved
awscli/customizations/configure/exportcreds.py Outdated Show resolved Hide resolved
awscli/customizations/configure/exportcreds.py Outdated Show resolved Hide resolved
ARG_TABLE = [
{'name': 'format',
'help_text': (
'The output format to display credentials.'
Copy link
Contributor

Choose a reason for hiding this comment

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

We should also probably clarify that the global arguments --output and --query do not have an effect on the format to avoid confusion.

"credential_process = aws configure export-credentials "
"--profile other-profile\n"
)
return 2
Copy link
Contributor

Choose a reason for hiding this comment

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

For this case, I'm wondering if we should match with some of the more granular return codes that we defined for v2: https://awscli.amazonaws.com/v2/documentation/api/latest/topic/return-codes.html. Specifically, this seems like it should be a 253 for configuration error, which we can propagate by raising a ConfigurationError.

For the other error cases, they seem like 253 configuration errors as well based on the documentation? I don't think I have a strong opinion on the ones that are returning 1, but I'm not sure if we should be using 2 as a return code as it is only isolated to S3 right now.

Copy link
Member Author

Choose a reason for hiding this comment

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

Ended up using 253 for both. If you have no credentials configured at all and try to run a CLI command you get 253, so it made sense to be consistent that if get_credentials() returns None, we have the same RC with this command.

"\n\nRecursive credential resolution process detected.\n"
"Try setting an explicit '--profile' value in the "
"'credential_process' configuration and ensure there "
"are no cycles:\n\n"
Copy link
Contributor

Choose a reason for hiding this comment

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

With regards to the error message, I'm wondering if we should include a note that the profile recursion cannot be deeper than X maximum? I'm mainly suggesting it as the error message is misleading if you do happen to have a non-cyclical credential process chain that is greater than or equal to four levels of recursion.

Copy link
Member Author

Choose a reason for hiding this comment

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

Yeah ended up having separate error messages for each case, now you get:

$ aws configure export-credentials --profile cycle-a

Unable to retrieve credentials: Error when retrieving credentials from custom-process:
Unable to retrieve credentials: Error when retrieving credentials from custom-process:
Unable to retrieve credentials: Error when retrieving credentials from custom-process:
Unable to retrieve credentials: Error when retrieving credentials from custom-process:
Maximum recursive credential process resolution reached (4).
Profiles seen: cycle-a -> cycle-b -> cycle-c -> cycle-d

Comment on lines +272 to +273
self.os_env['_AWS_CLI_PROFILE_CHAIN'] = 'foo,bar'
self.session.get_config_variable.return_value = 'bar,baz'
Copy link
Contributor

Choose a reason for hiding this comment

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

Could we limit the starting environment variable value to just one profile to start? Mainly given the maximum recursion depth is four, it seems ambiguous on whether it is failing due to encountering a previously visited profile or we are hitting the recursion maximum (if we assume that we are not properly escaping commas) especially since the error message does not discriminate between the two different cycle detection cases.

Copy link
Member Author

@jamesls jamesls Nov 16, 2022

Choose a reason for hiding this comment

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

I ended up having separate error messages for each case so I updated the test to check that this is because of a cycle and not max recursion. The cycle error message now looks like this:

$ aws configure export-credentials --profile cycle-a

Unable to retrieve credentials: Error when retrieving credentials from custom-process:
Unable to retrieve credentials: Error when retrieving credentials from custom-process:
Unable to retrieve credentials: Error when retrieving credentials from custom-process:
Credential process resolution detected an infinite loop, profile cycle: cycle-a -> cycle-b -> cycle-c -> cycle-a

@jamesls
Copy link
Member Author

jamesls commented Nov 16, 2022

@kyleknap I believe I got everything, ready for another look.

Copy link
Contributor

@kyleknap kyleknap left a comment

Choose a reason for hiding this comment

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

Looks good! 🚢

@kyleknap
Copy link
Contributor

For reference related to this comment: #7398 (comment), I talked to @jamesls about it. We decided to pass on implementing this format for the initial implementation for the following reasons:

  1. It adds complexity to the command in that there are three different args to control output for the command (e.g. --format, --output, and --query) and the application of some of the args is dependent on the format value.
  2. The default format is already in a JSON format that can be parsed out by other tools (e.g. jq, jp).
  3. We can always add the format in the future in a backwards compatible way.

hhtpcd pushed a commit to hhtpcd/starship that referenced this pull request Mar 15, 2023
Adds support for the AWS_CREDENTIAL_EXPIRATION environment variable
which was adopted as the standard way to set the expiration for
temporary credentials. The existing AWS_SESSION_EXPIRATION environment
variable is not dropped for backwards compatibility.

See aws/aws-cli#7398
hhtpcd pushed a commit to hhtpcd/starship that referenced this pull request Mar 15, 2023
Adds support for the AWS_CREDENTIAL_EXPIRATION environment variable
which was adopted as the standard way to set the expiration for
temporary credentials. The existing AWS_SESSION_EXPIRATION environment
variable is not dropped for backwards compatibility.

See aws/aws-cli#7398
hhtpcd pushed a commit to hhtpcd/starship that referenced this pull request Mar 15, 2023
Adds support for the AWS_CREDENTIAL_EXPIRATION environment variable
which was adopted as the standard way to set the expiration for
temporary credentials. The existing AWS_SESSION_EXPIRATION environment
variable is not dropped for backwards compatibility.

See aws/aws-cli#7398
andytom pushed a commit to starship/starship that referenced this pull request Mar 20, 2023
…iable (#5002)

feat(aws): supports AWS_CREDENTIAL_EXPIRATION environment variable

Adds support for the AWS_CREDENTIAL_EXPIRATION environment variable
which was adopted as the standard way to set the expiration for
temporary credentials. The existing AWS_SESSION_EXPIRATION environment
variable is not dropped for backwards compatibility.

See aws/aws-cli#7398
Indyandie pushed a commit to Indyandie/starship that referenced this pull request Jul 26, 2023
…iable (starship#5002)

feat(aws): supports AWS_CREDENTIAL_EXPIRATION environment variable

Adds support for the AWS_CREDENTIAL_EXPIRATION environment variable
which was adopted as the standard way to set the expiration for
temporary credentials. The existing AWS_SESSION_EXPIRATION environment
variable is not dropped for backwards compatibility.

See aws/aws-cli#7398
chipbuster pushed a commit to starship/starship that referenced this pull request Sep 1, 2023
* build(deps): update clap crates

* build(deps): update rust crate notify-rust to 4.7.1

* build(deps): update rust crate shadow-rs to 0.20.1

* build(deps): update rust crate git-features to 0.26.5

* build(deps): update rust crate notify-rust to 4.8.0

* docs(kubernetes): Remove extra backspace from regex in example (#4905)

Remove extra backspace from regex in example

In the example, `[\\w-]` would match a literal backspace `\`, the
character `w` or a dash `-`. By removing the backspace, instead it
matches any "word character" `\w` or a dash `-`.

* docs(i18n): new Crowdin updates (#4877)

* chore: use updated gitoxide crate names (#4913)

* build(deps): update rust crate gix to 0.37.1

* build(deps): update rust crate toml_edit to 0.19.4

* docs(install): update nushell instructions in installation script (#4921)

Improve Nushell installation instruction

Consistently use `save -f` rather than `save`; the latter fails if the
file already exists

Signed-off-by: Michel Alexandre Salim <[email protected]>

* build(deps): update rust crate clap_complete to 4.1.3

* build(deps): update rust crate gix to 0.37.2

* docs(i18n): new Crowdin updates (#4925)

* chore(master): release 1.13.0 (#4730)

* build(deps): update rust crate tempfile to 3.4.0

* fix: trigger release

* chore(master): release 1.13.1 (#4937)

* ci: set Node version for docs build

* ci: allow docs to be manually published via workflow_dispatch

* ci: remove unneeded dependency in publish job

* ci: add caching for docs publishing step

* build(deps): update rust crate schemars to 0.8.12

* build(deps): update dprint plugins

* build(deps): update rust crate shadow-rs to 0.21.0

* build(deps): update clap crates

* feat(release): handle chocolatey starship.portable and starship.install pkg publishing (#4723)

Handles starship.install (MSI installer) and starship.portable and makes starship an 
empty meta-package that only depends on starship.install. MSI/installer packages 
seem to be preferred over zip-based installers on chocolatey. Proper virtual packages 
that allow choosing either a portable or install variant aren't implemented in chocolatey yet.

* ci: replace `audit` with `deny` action (#4856)

* build(deps): update rust crate clap to 4.1.8

* build(deps): update gitoxide crates

* ci: use `reviewdog/action-suggester` for config-schema check (#4857)

* ci: use `reviewdog/action-suggester` for config-schema check

* increase workflow permissions

* fix(preset): add output-flag to avoid encoding issues (#4926)

* build(deps): update rust crate rayon to 1.7.0

* build(deps): update gitoxide crates

* build(deps): update pest crates to 2.5.6

* build(deps): update rust crate serde_json to 1.0.94

* build(deps): update npm to ^1.9.9

* build(deps): update rust crate open to 3.4.0

* docs(character): use updated `vimcmd_symbol` instead of older `vicmd_symbol` variant (#4960)

Fix typo in character example

* build(deps): update rust crate serde to 1.0.153

* docs(install): fix typo and update indentation and whitespaces (#4941)

* build(deps): update rust crate serde to 1.0.154

* build(deps): update rust crate gix to 0.40.0

* chore: fix clippy warnings for rust 1.68 (#4983)

* fix(init): avoid cygpath for starship binary path (#4970)

Update mod.rs

* build(deps): update rust crate open to v4 (#4982)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* build(deps): update rust crate toml_edit to 0.19.5

* build(deps): update rust crate gix to 0.41.0 (#4984)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* build(deps): update rust crate serde to 1.0.155

* build(deps): update rust crate chrono to 0.4.24

* build(deps): update rust crate semver to 1.0.17

* build(deps): update rust crate quick-xml to 0.28.0

* Update sponsors

* build(deps): update toml crates

* build(deps): update rust crate nu-ansi-term to 0.47.0

* build(deps): update rust crate windows to 0.46.0

* build(deps): update rust crate serde to 1.0.156

* docs(preset): Add `hostname.ssh_symbol` to nerd font preset (#4991)

docs(preset): Add missing ssh_symbol in nerd font

* fix(fossil_branch): fossil checkout database file name on windows (#4978)

fix(fossil_branch): use proper fossil checkout database file name on windows

* build(deps): update gitoxide crates

* build(deps): update rust crate toml_edit to 0.19.7

* build(deps): update clap crates

* build(deps): update rust crate serde to 1.0.157

* build(deps): update rust crate quick-xml to 0.28.1

* build(deps): update rust crate clap to 4.1.11

* docs(preset): add missing config for Java to no-runtime-version (#5011)

docs(preset): add missing Java to no-runtime-version

* build(deps): update rust crate serde to 1.0.158

* feat(aws): Adds support for AWS_CREDENTIAL_EXPIRATION environment variable (#5002)

feat(aws): supports AWS_CREDENTIAL_EXPIRATION environment variable

Adds support for the AWS_CREDENTIAL_EXPIRATION environment variable
which was adopted as the standard way to set the expiration for
temporary credentials. The existing AWS_SESSION_EXPIRATION environment
variable is not dropped for backwards compatibility.

See aws/aws-cli#7398

* build(deps): update rust crate open to 4.0.1

* build(deps): update rust crate regex to 1.7.2

* chore: add spell checker to workflows (#4975)

* chore: add spell checker to workflows

* fix: update config schema

* fix: revert for fennel.rs

* build(deps): update rust crate toml_edit to 0.19.8

* build(deps): update crate-ci/typos action to v1.14.3

* build(deps): update rust crate clap to 4.1.13

* build(deps): update embarkstudios/cargo-deny-action action to v1.5.0

* build(deps): update rust crate gix to 0.43.0

* fix(gradle): add support for unstable Gradle versions (#5021)

* build(deps): update rust crate serde_json to 1.0.95

* docs: Update nerd-font-symbols.toml pop_os! symbol (#5017)

Update nerd-font-symbols.toml

Use the specific pop_os! nerd symbol instead of the generic lollipop

* build(deps): update clap crates

* build(deps): update rust crate regex to 1.7.3

* build(deps): update rust crate serde to 1.0.159

* build(deps): update rust crate indexmap to 1.9.3

* build(deps): update clap crates to 4.2.0

* build(deps): update rust crate tempfile to 3.5.0

* build(deps): update rust crate windows to 0.47.0

* build(deps): update rust crate clap to 4.2.1

* build(deps): update rust crate gix to 0.43.1

* build(deps): update rust crate windows to 0.48.0

* fix(pulumi): Fix formatting on pulumi module when using version (#5038)

Fix formatting on pulumi module when using version

Sanitize `pulumi version` output to remove leading 'v' character and trailing
newlines.

* feat(fossil): detection of Fossil check-outs in subdirectories (#4910)

* Move PathExt::device_id() outside modules module

* Add upwards_sibling_scan-function

* Fix Fossil check-out detection in subdirectories

* Use shared upwards scanning function in hg_branch

* Let the caller specify if they're looking for a file or a folder

* fix merge

---------

Co-authored-by: David Knaack <[email protected]>

* feat(aws): add support for source_profile (#4859)

feat(aws): add support for source_profile (#3834)

Co-authored-by:	@luiscamaral

* feat(custom): add option to check if pwd is in a repo (#4822)

* feat(custom): add option to check if pwd is in a repo

* Apply suggestions from code review

Co-authored-by: David Knaack <[email protected]>

* change whenrepo to require_repo

* chore: fix doc formatting

---------

Co-authored-by: David Knaack <[email protected]>

* build(deps): update rust crate terminal_size to 0.2.6

* build(deps): update rust crate process_control to 4.0.3 (#5046)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* build(deps): update pest crates to 2.5.7 (#5043)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* build(deps): update crate-ci/typos action to v1.14.4

* docs(presets): add azure and gcloud default symbols to plaintext preset (#5040)

* chore(nu): use updated closure syntax (#5054)

Update starship.nu to conform to Nushell changes

Nushell recently made a change to require that all closures have an explicit parameter list, even if it's empty, in nushell/nushell#8290.

This updates starship.nu to conform to this requirement.

I have casually tested this against both the latest released version of Nushell, and the latest version on HEAD; the changed code works well (for me) on both.

* build(deps): update crate-ci/typos action to v1.14.5

* build(deps): update embarkstudios/cargo-deny-action action to v1.5.1

* fix(java): wrong version number when using Android Studio JDK (#4966)

The regular expression would get the revision number found in:

    with gcc Android (7284624, based on r416183b)

so it would print "7284624".

* build(deps): update dprint plugins

* build(deps): update rust crate os_info to 3.7.0 (#5057)

* build(deps): update rust crate os_info to 3.7.0

* add new os symbols

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* docs(i18n): new Crowdin updates (#4956)

* chore(master): release 1.14.0 (#4948)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix: trigger release

* fix: bootstrap manifest for release-please (#5087)

* fix: update the release-please manifest

* chore: fix release-please-manifest version

* ci: Revert "fix: bootstrap manifest for release-please (#5087)"

This reverts commit e392d14.

* chore(master): release 1.14.1 (#5090)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* ci: add missing GH token to doc publishing flow

* build(deps): update rust crate serde to 1.0.160

* docs: update snap instructions (#5007)

As part of #4954, non-edge packages of Starship were removed from Snapcraft. This means the only way to install Starship is through the `edge` channel using `snap install --edge starship`.

* fix(git_commit): resolve panic on 32-bit targets (#5095)

* chore(choco): remove chocolatey dependency (#5078)

* docs(i18n): new Crowdin updates (#5093)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations tokyo-night.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations bracketed-segments.md (Ukrainian)

* New translations nerd-font.md (Ukrainian)

* New translations no-runtimes.md (Ukrainian)

* New translations plain-text.md (Ukrainian)

* New translations pure-preset.md (Ukrainian)

* New translations pastel-powerline.md (Ukrainian)

* New translations no-nerd-font.md (Ukrainian)

* New translations no-empty-icons.md (Ukrainian)

* New translations README.md (French)

* New translations README.md (Russian)

* New translations README.md (Spanish)

* New translations README.md (Arabic)

* New translations README.md (German)

* New translations README.md (Italian)

* New translations README.md (Japanese)

* New translations README.md (Korean)

* New translations README.md (Dutch)

* New translations README.md (Polish)

* New translations README.md (Portuguese)

* New translations README.md (Turkish)

* New translations README.md (Chinese Simplified)

* New translations README.md (Chinese Traditional)

* New translations README.md (Vietnamese)

* New translations README.md (Portuguese, Brazilian)

* New translations README.md (Indonesian)

* New translations README.md (Sorani (Kurdish))

* New translations README.md (Ukrainian)

* New translations README.md (Norwegian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations README.md (Ukrainian)

* New translations bracketed-segments.md (Ukrainian)

* New translations nerd-font.md (Ukrainian)

* New translations no-runtimes.md (Ukrainian)

* New translations plain-text.md (Ukrainian)

* New translations pure-preset.md (Ukrainian)

* New translations pastel-powerline.md (Ukrainian)

* New translations no-nerd-font.md (Ukrainian)

* New translations no-empty-icons.md (Ukrainian)

* New translations tokyo-night.md (Ukrainian)

* New translations README.md (Ukrainian)

* chore(master): release 1.14.2 (#5098)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* build(deps): update embarkstudios/cargo-deny-action action to v1.5.2

* build(deps): update rust crate quick-xml to 0.28.2

* build(deps): update rust crate serde_json to 1.0.96

* build(deps): update rust crate starship-battery to 0.8.0 (#5106)

* build(deps): update rust crate gethostname to 0.4.2

* feat: add typechange to git_status module (#4829)

Co-authored-by: David Knaack <[email protected]>

* feat(azure): subscription name aliases (#4949)

* From issue #4448, added `subscription_aliases`
as a field for the Azure module

Can be set in starship.toml with
[azure.subscription_aliases]

* Updated config file schema

* Added entry into documentation

* Update README.md

* Formatted with dprint

* feat(git_metrics): add option to ignore submodules (#5052)

* add docs

* update schema

* ok, actually update schema

* add test

* fix lint

* accidentally included my .devenv directory

* feat: Add Solidity Module (#5047)

* Adding documentation

* Documentation and schema addition

* Creating solidity config

* Module for solidity lang

* Updating all the files

* Changing according to clippy

* Fixing misspellings

* Changes suggested by clippy

* Updating schema , maybe fixing docs workflow error

* Updating schema

* Removing solcjs from default compiler list

* Fallback test added and test string fixed

* Fixing docs

* Updating schema

* Updating schema

* Fixing docs

* Updating schema

* Updating schema

* Typo fix

* Update docs/config/README.md

Co-authored-by: David Knaack <[email protected]>

* Update src/utils.rs

Co-authored-by: David Knaack <[email protected]>

* Fix build commit

---------

Co-authored-by: Anirban Halder <[email protected]>
Co-authored-by: David Knaack <[email protected]>

* build(deps): update crate-ci/typos action to v1.14.6

* build(deps): update rust crate clap to 4.2.2

* fix(config): Make print-config not panic without a config (#5001)

* build(deps): update rust crate open to 4.0.2

* build(deps): update rust crate clap to 4.2.3

* build(deps): update rust crate gix-features to 0.29.0

* build(deps): update crate-ci/typos action to v1.14.8

* build(deps): update rust crate clap to 4.2.4

* build(deps): update rust crate dunce to 1.0.4

* build(deps): update rust crate regex to 1.8.0

* build(deps): update rust crate clap_complete to 4.2.1

* build(deps): update rust crate regex to 1.8.1

* docs(pwsh): use a more convenient method to update the window title (#5125)

docs: fix PowerShell example to update the window title

* fix(style): ensure nested style variables are processed during formatting (#5120)

fix: ensure nested style variables are processed during formatting

* refactor(Context): `set_config` method for `Context` (#5079)

* add `set_config` method to `Context`

* Made inline comment a doc comment

* use `default_context()` for `set_config()` test

* use `set_config()` in tests for `print.rs`

* set root config w `set_config()` (`print.rs` test)

* build(deps): update rust crate home to 0.5.5

* build(deps): update pest crates to 2.6.0

* build(deps): update rust crate open to 4.1.0

* build(deps): upgrade gitoxide to v0.44 for performance improvements during discovery (#5141)

upgrade gitoxide to v0.44 for performance improvements during discovery

Please note that there is a new `dot_git_only` option which would further
speedup discovery. On even moderatly fast disks that probably not going
to make a difference, but it will on incredibly slow (networked) disks.

See helix-editor/helix#6867 for reference.

* fix(snap): Update snapcraft.yaml to add personal-files interface (#5131)

* build(deps): update rust crate clap to 4.2.5

* docs: add Ukranian to the project README (#5147)

* Specify personal-file interface for snap

* fix(presets): Added ($style) to format in module 'sudo' in Bracketed Segments Preset (#5146)

* Fixed error in module 'sudo'

There was no ($style) in format. When module enabled this lead to the error [WARN] - (starship::modules::sudo): Error in module `sudo`

* Update docs/.vuepress/public/presets/toml/bracketed-segments.toml

typo fix

Co-authored-by: David Knaack <[email protected]>

---------

Co-authored-by: David Knaack <[email protected]>

* ci: remove actions-rs actions (#5115)

* build(deps): update rust crate clap to 4.2.7

* build(deps): update crate-ci/typos action to v1.14.9

* build(deps): update rust crate serde to 1.0.162

* build(deps): update rust crate rust-ini to 0.19.0 (#5172)

* build(deps): update rust crate rust-ini to 0.19.0

* add CC0-1.0 to allowed license list

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* build(deps): update rust crate versions to v5 (#5176)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* feat(aws): support aws sso with automatic authentication refresh (#5170)

* feat(aws): support aws sso with automatic authentication refresh

* docs(aws): add sso_session for profile detection

* feat(gcloud): add `detect_env_vars` option (#5166)

* feat(gcloud): add `detect_env_vars` option

* regenerate config schema

* docs: update CONTRIBUTING.md and README.md (#5153)

* build(deps): update rust crate clap_complete to 4.2.2

* fix: update of presets and default configuration to reflect changes in Nerd Fonts 3.0 (#5162)

* Updated nf-mdi-* to nf-md-* symbols

The following symbols where changed
- directory.read_only
- memory_usage
- meson
- nim
- os.symbols.Garuda
- os.symbols.HardenedBSD
- os.symbols.Illumos
- os.symbols.OpenBSD
- os.symbols.OracleLinux
- os.symbols.Redox
- os.symbols.Solus
- os.symbols.Windows
- package
- rlang

* Updated nf-mdi-* to nf-md-* symbols (for all other presets)

The following symbols where changed
for pastel-powerline:
- directory.substitutions.Documents
- nim
for tokyo-night
- directory.substitutions.Documents
- golang

* Updated nf-mdi-* to nf-md-* symbols for the default configuration in modules in src/configs/*.rs

The following symbols where changed
- azure
- battery.full_symbol
- battery.charging_symbol
- battery.discharging_symbol
- battery.unknown_symbol
- battery.empty_symbol

* Updated config-schema.json

* Updated src/modules/*.rs docs/config/README.md

and used `nerdfix` to check if I overlook anything

* Fixed the battery discharging symbol in the tests

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: jtrv <[email protected]>

* build(deps): disable unnecessary/unused regex features (#5175)

This will reduce the binary size by ~400 kB.

* build(deps): update rust crate serde to 1.0.163

* build(deps): update xalvarez/prevent-file-change-action action to v1.3.2

* build(deps): update rust crate clap_complete to 4.2.3

* build(deps): update rust crate gethostname to 0.4.3

* build(deps): update dprint plugins

* build(deps): update toml crates

* build(deps): update crate-ci/typos action to v1.14.10

* build(deps): update clap crates to 4.3.0

* build(deps): update crate-ci/typos action to v1.14.11

* build(deps): update rust crate regex to 1.8.2

* build(deps): update rust crate toml_edit to 0.19.10

* build(deps): update rust crate regex to 1.8.3

* build(deps): update rust crate shadow-rs to 0.22.0

* build(deps): update rust crate log to 0.4.18

* build(deps): update rust crate chrono to 0.4.25

* build(deps): update rust crate once_cell to 1.17.2

* build(deps): update rust crate chrono to 0.4.26

* refactor: simplify `shadow-rs` setup in `build.rs` (#5209)

Update build.rs

* feat(golang): adding `mod_version` variable (#5177)

* feat(nodejs): Add `expected_version` variable (#5081)

* add `expected_version` variable to `nodejs`

* show comparison symbols with `expected_version`

* documentation, formatting, more tests

* Remapped `engines_version` to $version

* Added better descriptions to docs

* Update docs/config/README.md

Co-authored-by: David Knaack <[email protected]>

* Removed clone from `nodejs`, formatting

* refactored function calls

* rewrote `engines_version` formatter

* Moved Lazy variables into maps

---------

Co-authored-by: David Knaack <[email protected]>

* build(deps): update crate-ci/typos action to v1.14.12

* build(deps): update clap crates to 4.3.1

* fix: bump libz-ng-sys (#5218)

* build(deps): update rust crate clap to 4.3.2

* build(deps): update rust crate shadow-rs to 0.23.0

* build(deps): update rust crate regex to 1.8.4

* build(deps): update rust crate once_cell to 1.18.0

* Update GA measurement ID

* build(deps): update rust crate nu-ansi-term to 0.48.0

* docs(i18n): new Crowdin updates (#5109)

* Revert "Specify personal-file interface for snap"

This reverts commit 2641a37.

This was reverted due to errors in the snap publishing pipeline:
interface 'starship-config' not found in base declaration declaration-snap-v2_plug_known (starship-config, starship-config)
invalid plugs interface definition 'starship-config' lint-snap-v2_app_plugs_plug_reference (starship, starship-config)
unknown interface 'starship-config' lint-snap-v2_plugs (starship-config, starship-config)

* chore(master): release 1.15.0 (#5108)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Checkout before running gh commands in CI

* Inline script for GA4

* build(deps): update gitoxide crates

* build(deps): update rust crate tempfile to 3.6.0

* Update GA4 tag attribute

* build(deps): update crate-ci/typos action to v1.15.0

* feat: update the nushell init file and make it valid module and overlay (#5188)

* break long commands into multiple lines for readability

* fix the format of closures

We generally write `{|| ...}` instead of `{ || ...}`.

* remove the `$"--opt=(val)"` structure when possible

`starship` does not require to use `--opt=val` and so we do not
need to do that with Nushell :)

the only place where this is required is with `--status` because
`$env.LAST_EXIT_CODE` can be negative and `starship` does not
appear to *like* values of the form `-2`...
so i left this line as it was.

on the other hand, `$env.CMD_DURATION_MS` and `(term size).columns`
should be fine 😌

* simplify the `config` mutation with new `?` syntax

This is a new very handy feature of Nushell which gives a much
simpler command combined with `default` and `merge`.

* put all `let-env`s inside an `export-env` with `load-env`

This commit has two reasons of existing:
- i think it makes it a bit easier to read with less `let-env`s
- it transforms the *script* into both a valid module and a valid
overlay

* bump the version to `0.78` in to docs

* add a note about the init file being also a module to all docs

* tweak the documentation

* update the Nushell part of the install script

* format the vuepress config file

as previous commit 1175801 was
not successful, let's try to make the CI happy manually 😌

* remove code quotes in the `config_cmd` of Nushell

* format the style in the Nushell `warning` section

* build(deps): update rust crate serde to 1.0.164 (#5231)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* build(deps): update rust crate starship-battery to 0.8.1 (#5232)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* feat(pwsh): Support vi command mode indicator (#5049)

Support vi command mode in powershell

* build(deps): update rust crate clap to 4.3.3 (#5235)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* build(deps): update rust crate gix to 0.46.0

* build(deps): update rust crate log to 0.4.19 (#5240)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore: fix typos (#5239)

* chore: fix new clippy lints (#5241)

* docs: Correct Arch Linux Repo Name (#5243)

* Correct Arch Linux repo name

* Revert changes to translated files.

* build(deps): update rust crate quick-xml to 0.29.0

* build(deps): update reviewdog/action-suggester action to v1.6.1

* build(deps): update rust crate clap to 4.3.4

* build(deps): update rust crate serde_json to 1.0.97

* build(deps): update rust crate shadow-rs to 0.23.0 (#5250)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(bash): Clear out completed jobs before counting NUM_JOBS (#5253)

Clear out completed jobs before counting NUM_JOBS

* build(deps): update pest crates to 2.6.1

* redesign

* jet link

* screenshot

* readme, config

* clean trails whitespace

* fmt

* comment vicmd

* mv pos, right prompt warn

* right prompt prereq

* reco and typo

* resolve build check error

* tidy

* resolve build check error

* resolve build check error

* request changes

* rm src contents

* rm git_status.rs

* tryint fix checks

* PR review request: rm comments

* PR review request: rm redundant default

* PR review request: enable aws

---------

Signed-off-by: Michel Alexandre Salim <[email protected]>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tom Fenech <[email protected]>
Co-authored-by: Matan Kushner <[email protected]>
Co-authored-by: David Knaack <[email protected]>
Co-authored-by: Michel Alexandre Salim <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jan Dittrich <[email protected]>
Co-authored-by: Zhizhen He <[email protected]>
Co-authored-by: Swarnim Maheshwari <[email protected]>
Co-authored-by: Guilhem Saurel <[email protected]>
Co-authored-by: Stefan Cosma <[email protected]>
Co-authored-by: Christian Meusel <[email protected]>
Co-authored-by: Harry Hodge <[email protected]>
Co-authored-by: Harsh Shandilya <[email protected]>
Co-authored-by: Dave Parr <[email protected]>
Co-authored-by: Ryan Sabatini <[email protected]>
Co-authored-by: Vegard Skui <[email protected]>
Co-authored-by: Cosimo Matteini <[email protected]>
Co-authored-by: jliaoh <[email protected]>
Co-authored-by: Matthew T <[email protected]>
Co-authored-by: Samir Talwar <[email protected]>
Co-authored-by: Aurélien Gâteau <[email protected]>
Co-authored-by: Aki Kanellis <[email protected]>
Co-authored-by: Chad Denyar <[email protected]>
Co-authored-by: marcybell <[email protected]>
Co-authored-by: Colton Donnelly <[email protected]>
Co-authored-by: AnirbanHalder654322 <[email protected]>
Co-authored-by: Anirban Halder <[email protected]>
Co-authored-by: Dom Slee <[email protected]>
Co-authored-by: Micky Brunetti <[email protected]>
Co-authored-by: Andrew Pantuso <[email protected]>
Co-authored-by: Sebastian Thiel <[email protected]>
Co-authored-by: Scott Parkhill <[email protected]>
Co-authored-by: Eldar Khurmamatov <[email protected]>
Co-authored-by: kensasongko <[email protected]>
Co-authored-by: Denis Cornehl <[email protected]>
Co-authored-by: Mick Hohmann <[email protected]>
Co-authored-by: jtrv <[email protected]>
Co-authored-by: Jakub Jirutka <[email protected]>
Co-authored-by: baoyachi. Aka Rust Hairy crabs <[email protected]>
Co-authored-by: Antoine Stevan <[email protected]>
Co-authored-by: Nemo157 <[email protected]>
Co-authored-by: Dosenpfand <[email protected]>
Co-authored-by: Ajeet D'Souza <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants