Giter VIP home page Giter VIP logo

perl-app-yak's Introduction

CI GitHub Action status badge Spellcheck Action status badge Markdownlint Action status badge

The yak command line utility is still WIP and to be regarded as alpha software, most features are working but it not ready for first official release


NAME

App::Yak - Application to help with yak shaving for Git repositories etc.

SYNOPSIS

my $yak->new();
my $rv = $yak->process();

DESCRIPTION

The yak shaver can scan a directory for files, which can be classified as yaks in need of shaving. Meaning files which are maintained else where are often copy-pasted.

The file names can be configured in a central configuration file, like this:

$HOME/.config/yak/checksums.json

{
    "CONTRIBUTING.md": "15701b6b27e1d49ca6636f2695cfc49b6622c7152f74b14becc53850811db54f"
}

If a file is encountered, which matches the name, the checksum of the encountered file is calculated and is compared to the checksum listed in the central file.

  • If they match, everything is okay
  • If they differ, the difference has to be addressed

The recommendation is to have the checksum in the central file, reflect the authoritative revision and hence you can overwrite the file in the directory you where inspecting.

Alternatively to specifying a checksum, you can specify a file URL:

{
    "MANIFEST.SKIP": "file://MANIFEST.SKIP"
}

The file pointed to has to be available in: $HOME/.config/yak/files

Then yak can calculate the checksum dynamically, based on the reference file and can based on invocation copy the reference file to the location of the evaluated file in the case where the two differ.

CHECKSUM DATA FILE EXAMPLE

This JSON file should be created as $HOME/.config/yak/checksums.json.

{
    "CODE_OF_CONDUCT.md": "https://gist.githubusercontent.com/jonasbn/dc331774eb67d067981902cadd3955ba/raw/b41de645c599be51e40a27e856333eeea261c12b/yaksums.json",
    "CONTRIBUTING.md": "file://CONTRIBUTING.md",
    "PULL_REQUEST_TEMPLATE.md": "91dabee84afd46f93894d1a266a773f3d46c2c0b1ae4813f0c7dba34df1dc260",
    "MANIFEST.SKIP": "file://MANIFEST.SKIP"
}

IGNORING CERTAIN DIRECTORIES, FILES AND FILENAME PATTERNS

yak supports the ability to ignore:

  • Files
  • Directories
  • Filename patterns

This is accomplished using an implementation based on .gitignore. To not intervene and to let git and yak work in harmony. The files used by yak are named .yakignore.

The mean that you can:

  • Specify patterns of files and directories in your configuration file, see "CONFIGURATION". This configuration will be overwritten if the next options are used.
  • You can add an .yakignore in the root of your repository and it will work for all files and directories in the file structure beneath it. Do note that the presence of this files, ignores and configuration in regard to using this feature. Meaning that disabling yak ignores for a single repository can be accomplished by placing an empty .yakignore file in the root of the repository.
  • a child .yakignore can be placed in a subsequent directory, working on all files and directories beneath it, do note that directories specified to be ignored in the parent .yakignore are ignored and are not parsed and used.

YAK IGNORE FILE EXAMPLE

.git
local

The above example specified the local directory created by Perl's Carton. Another good candidate could be the .git folder.

Since yak is processing a directory structure recursively, specifying directories should speed up the processing. Specifying single files by name can be used to skip a file specified in the data source file temporarily.

INVOCATION

yak takes the following command line arguments:

  • --verbose, enables more verbose output, can be configured see "CONFIGURATION"
  • --silent, disables output and you have to rely on the return value see "RETURN VALUES" below.
  • --debug, enables debug output. can be configured see "CONFIGURATION"
  • --nodebug, disables debug output even if configured or provided as --debug, see above
  • --config file, reads alternative configuration file instead of default, see "CONFIGURATION"
  • --noconfig, disables reading of the configuration file, (see "CONFIGURATION") and you have to rely on the command line arguments
  • --nochecksums, disables reading of the global checksums file, see "DATA SOURCE"
  • --checksums file, reads alternative checksums file instead of default, see "DATA SOURCE"
  • --color, enables colorized output, enabled by default or can be configured, see "CONFIGURATION"
  • --nocolor, disables colorized output, even if configured or provided as --color, see above
  • --emoji, enables emojis in output, enabled by default or can be configured, see "CONFIGURATION"
  • --noemoji, disables emojis in output, even if configured or provided as --emoji, see above
  • --about, emits output on configuration and invocation and terminates with success
  • --help, emits help message listing all available options
  • --version, emits version message listing version of the software

Command line arguments override the configuration.

RETURN VALUES

  • 0, success, everything is okay
  • 1, failure, a located filed did not match the designated checksum

Note that --about return as success with out processing any data apart from reading configuration and parsing command line arguments.

ENVIRONMENT

yak supports the following environment variables:

  • $CLICOLOR}, if set to false (0) it attempts to disable colorized output, if set to true (1), it attempts to enable colorized output
  • $NO_COLOR, if set it attempts to disable colorized output, do note that value does not matter
  • $CLICOLOR_FORCE, if set to true (1) it attempts to enable colorized output, if set to false (0), it attempts to disable colorized output
  • $YAK_SUCCESS_COLOR, setting color for success messages, used when colors are enabled
  • $YAK_FAILURE_COLOR, setting color for failure messages, used when colors are enabled
  • $YAK_SKIP_COLOR, setting color for skip messages, used when colors are enabled
  • $YAK_IGNORE_COLOR, setting color for ignore messages, used when colors are enabled

CLI Color Control

The order of precedence is as follows for CLI color control:

    1. Environment (this section), $CLICOLOR_FORCE
    1. Command line arguments, --nocolor and --color in that order, see "INVOCATION"
    1. Environment (this section), $NO_COLOR
    1. Environment (this section), $CLICOLOR
    1. Configuration, see "CONFIGURATION", color configuration option

This aims to follow the proposed standard described in this article.

Color Control

The order of precedence is as follows for color control:

    1. Command line arguments, --nocolor and --color in that order, see "INVOCATION"
    1. Environment (this section), $YAK_*_COLOR
    1. Configuration, see "CONFIGURATION", colors configuration options: success_color, failure_color, skip_color and ignore_color

Do note this works for the single environment variables, the command line arguments work generally.

CONFIGURATION

$HOME/.config/yak/config.yml

yak can be configured using the following parameters:

  • verbose, enabling (true) or disabling (false) more verbose output
  • debug, enabling (true) or disabling (false) debug output
  • color, enabling (true) or disabling (false) colorized output
  • emoji, enabling (true) or disabling (false) colorized output
  • success_emoji, setting emoji for success messages, used when emojis are enabled
  • failure_emoji, setting emoji for failure messages, used when emojis are enabled
  • skip_emoji, setting emoji for skip messages, used when emojis are enabled
  • ignore_emoji, setting emoji for ignore messages, used when emojis are enabled
  • success_color, setting color for success messages, used when colors are enabled
  • failure_color, setting color for failure messages, used when colors are enabled
  • skip_color, setting color for skip messages, used when colors are enabled
  • ignore_color, setting color for ignore messages, used when colors are enabled
  • yakignores, specify a list of file directory names and patterns to be ignored

Configuration can be overridden by command line arguments, see "INVOCATION".

EXAMPLE CONFIGURATION

This YAML file should be created as $HOME/.config/yak/config.yml.

verbose: false
debug: false
skip_emoji: ✖️
failure_emoji: ❌
success_emoji: ✅
failure_color: yellow
yakignores:
- .git
- local

DATA SOURCE

There are 3 ways to provide checksum data to yak.

  • The default using: $HOME/.config/yak/checksums.json, which can then be edited to match your needs
  • Using a project or repository specific: .yaksums.json located in the root of your project or repository directory
  • Using an JSON file adhering to formatting described in this chapter, which can be located elsewhere on your file system

The default data source is described in the "DESCRIPTION". As a an alternative a per project file can be specified in the designated repository/directory.

The file should be named: .yaksums.json

The contents follow the same format as the $HOME/.config/yak/checksums.json.

This JSON file should look as follows:

{
    "<filename>": "<sha256 checksum for the file specifed by the filename>"
}

An example:

{
    "CODE_OF_CONDUCT.md": "https://gist.githubusercontent.com/jonasbn/dc331774eb67d067981902cadd3955ba/raw/b41de645c599be51e40a27e856333eeea261c12b/yaksums.json",
    "CONTRIBUTING.md": "file://CONTRIBUTING.md",
    "PULL_REQUEST_TEMPLATE.md": "91dabee84afd46f93894d1a266a773f3d46c2c0b1ae4813f0c7dba34df1dc260",
    "MANIFEST.SKIP": "file://MANIFEST.SKIP"
}

If you want to have Yak help you checking for the presence of a file, specify the boolean true instead of a checksum.

{
    "ISSUE_TEMPLATE.md": true,
    "README.md": true
}

Or you can issue an error if a file is present, which should not be there, again using a boolean, but set to false.

{
    ".vstags": false
}

COLORS

Terminal colors are awesome, but also not as easy to work with. yak supports quite a few and relies on the implementation made available by Term::ANSIColor, more options and more information is available, so please consult the Term::ANSIColor documentation for more details.

  • black
  • red, default for failure
  • green, default for success
  • yellow
  • blue, default for skip and ignore
  • magenta
  • cyan
  • white
  • bright_black
  • bright_red
  • bright_green
  • bright_yellow
  • bright_blue
  • bright_magenta
  • bright_cyan
  • bright_white
  • faint

The default colors should be available in most terminals. The color faint is not supported by all terminals, but looks truly awesome, please consult the Term::ANSIColor documentation for compatibility details.

USING DOCKER

An experimental Docker implementation has been included with the repository.

It can be built using the following statement:

$ docker build -t jonasbn/yak .

And then run as follows:

$ docker run --rm -it -v $PWD:/tmp jonasbn/yak

It will consume all the command line arguments (see "INVOCATION").

The Docker image has the following command line arguments embedded:

  • --noconfig
  • --nochecksums

Since the ability to read files outside the Docker container is limited to mounted directories.

The mount point is expected to be a directory containing the files to be checked against the checksum data structure. Please see the "LIMITATIONS" for details.

If you want to utilize the supported environment variables (see "ENVIRONMENT") you have to do something along the lines of:

$ docker run --rm -it -v $PWD:/tmp --env CLICOLOR=$CLICOLOR jonasbn/yak

API

noemoji

print_about

print_failure

print_help

print_ignore

print_skip

print_success

print_version

process

read_checksums

read_config

read_environment

subprocess

print_match_failure

print_match_success

print_no_presence_success

print_presence_failure

print_presence_success

REQUIREMENTS AND DEPENDENCIES

yak is specified to a minimum requirement of Perl 5.10, based on an analysis made using Perl::MinimumVersion, implementation syntax requires Perl 5.8.0, so yak could be made to work for 5.8.0.

LIMITATIONS

  • yak is specified to a minimum requirement of Perl 5.10, based on an analysis made using Perl::MinimumVersion, implementation syntax requires Perl 5.8.0, so yak could be made to work for 5.8.0.
  • Running under Docker is limited to using only checksums specified in a local <.yaksums.json> and configuration has to be specified using command line arguments not a file
  • The use of a local: .yaksums.json is limited to checksums and cannot calculate based on files, since files are located in an unmounted directory
  • The use of YAML implementation is based on YAML::Tiny and is therefor limited to this more simple implementation, which was however deemed sufficient for Yak.
  • yak does currently not support symbolic links when doing file system traversal. The implementation is based on File::Find and support for symbolic links could be enabled, but has not been regarded as necessary for now.
  • The parsing of .yakignore files is based on Text::Gitignore and is limited to what this implementation supports, no known issues at this time.

ISSUE REPORTING

If you experience any issues with yak report these via GitHub. Please read the issue reporting template.

DEVELOPMENT

If you want to contribute to yak please read the Contribution guidelines and follow the pull request guidelines.

CONTINUOUS INTEGRATION

The GitHub repository of perl-app-yak was renamed from yak. This broke the continuous integration setup with Travis CI. Therefore this has been disabled for now and instead an experimental CI based on GitHub Actions is used.

MOTIVATION

Much of what I do is yak shaving. For you who are not familiar with the term:

"[MIT AI Lab, after 2000: orig. probably from a Ren & Stimpy episode.]
Any seemingly pointless activity which is actually necessary to solve
a problem which solves a problem which, several levels of recursion
later, solves the real problem you're working on."

REF: The Jargon File

Used commonly for repetitive and boring work, required to reach a certain goal.

AUTHOR

COPYRIGHT

yak is (C) by Jonas Brømsø, (jonasbn) 2018-2022

Image used on the yak website is under copyright by Shane Aldendorff.

LICENSE

yak is released under the MIT License

REFERENCES

perl-app-yak's People

Contributors

dependabot[bot] avatar jonasbn avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar

perl-app-yak's Issues

0.000138

Test2::Manual::Testing::Todo 0.000138
Test2::Manual::Tooling 0.000138
Test2::Manual::Tooling::FirstTool 0.000138
Test2::Manual::Tooling::Formatter 0.000138
Test2::Manual::Tooling::Nesting 0.000138
Test2::Manual::Tooling::Plugin::TestExit 0.000138


This issue was generated by todo based on a Todo comment in 546f98a when #44 was merged. cc @jonasbn.

Add configuration file command line argument

🔤 User Story

As a developer
I can invoke yak and tell it to read an alternative configuration file
so that I experiment or use and alternative to my global configuration

ℹ️ Notes

  • See also --noconfig introduced in release 0.2.0

🆗 Acceptance Criteria

  • I can provide the command line argument: --config <file>
  • it will suppress the global config
  • it will read the designated file
  • it will assume configuration from the desinated file

➡️ Resources and References

  • N/A

I need to be able to store identification of canonical versions of files for comparison

🔤 User Story

As a developer
I can store identification of canonical versions
so that I can compare these and see if they differ when I do a scan

ℹ️ Notes

  • The checksum calculation should be something along the lines of what GitHub uses, since this would work for us
  • Canonical versions of files should be able to be copied from the storage to the actual project, this do however belong in another story
  • sha256_file_hex from Crypt::Digest::SHA256, seems like a good candidate
  • Perhaps this story should be split in two?

🆗 Acceptance Criteria

  • I can specify a canonical version of a file as a checksum
  • I can specify a canonical version of a file as an actual file
  • I can calculate a checksum if a file is specified
  • I can use my list of canonical versions in the comparison for files (requires the checksum calculation mentioned above)
  • I can use my list of canonical versions in the comparison for checksums

➡️ Resources and References

Implement preflight check so we fail gracefully if unable to execute

🔤 User Story

As a developer
I can invoke yak it will perform a preflight check
so that I see that it works

ℹ️ Notes

  • See also --about which is on the drawing board

🆗 Acceptance Criteria

  • The check will locate the designated configuration file and check it
  • Can it be read?
  • It is proper YAML?
  • If not it will fail gracefully
  • The check will locate the designated data source and check it
  • Can it be read?
  • It is proper JSON?
  • If not it will fail gracefully

➡️ Resources and References

  • N/A

Extend --about capability with presentation of environment variables

🔤 User Story

As a developer
I can specify --about
so that I can see the defined relevant environment variables

ℹ️ Notes

  • This is an extension to the existing --about

🆗 Acceptance Criteria

  • I can see the value of $CLICOLOR if it is defined when I invoke using --about
  • I can see the value of $CLICOLOR_FORCE if it is defined when I invoke using --about

➡️ Resources and References

Add help command line argument

🔤 User Story

As a developer
I can invoke yak and tell it to tell it to display all it's capabilities
so that I can see how it can be used

ℹ️ Notes

  • See also #13 on --about

🆗 Acceptance Criteria

  • I can prove the command line argument: --help, it will display
  • current version number of yak
  • all command line arguments options
  • a brief help message

➡️ Resources and References

  • N/A

Add color control to environment variables

🔤 User Story

As a developer
I can customize the colors used in output using environment variables
so that output suits me and my visual style

ℹ️ Notes

  • This is in addition to the configuration feature

🆗 Acceptance Criteria

  • I can specify a custom color for successful checks/files using an environment variable
  • I can specify a custom color for failing checks/files using an environment variable
  • I can specify a custom color for skipped checks/files using an environment variable
  • I can specify a custom color for ignored checks/files using an environment variable
  • Environment variables overwrite defaults settings
  • Environment variables overwrite configuration settings
  • --nocolor overwrites environment variables

➡️ Resources and References

  • N/A

Added support for environment variable to disable colorized output

🔤 User Story

As a developer
I can set environment variables to disable colorized output
so that I can have consistant usage patterns across applications

ℹ️ Notes

  • This is inspired by a section in the documentation for Term::ANSIColor, which has a section on supporting the: environment variable [CLICOLOR][CLICOLOR]
  • This is based on a proposal for a defacto standard described in this article

The usage pattern described:

if (exists($ENV{CLICOLOR}) && $ENV{CLICOLOR} == 0) {
    if (!$ENV{CLICOLOR_FORCE}) {
        $ENV{ANSI_COLORS_DISABLED} = 1;
    }
}

🆗 Acceptance Criteria

  • I can disable and enable colorized output using the environment variable: $CLICOLOR
  • I can force enabling of colorized output using the environment variable: $CLICOLOR_FORCE

➡️ Resources and References

  1. MetaCPAN: Term::ANSIColor
  2. MetaCPAN: "Supporting CLICOLOR" section of Term::ANSIColor
  3. Bixsense: "Standard for ANSI Colors in Terminals"
  4. What is a user story from Mountain Goat Software

Support for specifying presence of file

🔤 User Story

As a developer
I can specify if a file, not in a particular version, must be present
so that I can check if files are present

ℹ️ Notes

  • I can specify a requirement for a file being present instead of a checksum
  • This could be accomplished using YAML boolean

Example

{
    "LICENSE": true
}

🆗 Acceptance Criteria

  • I can specify a check for a file presence, without specifying a specific version (checksum)
  • I can specify a check for a file, presence which will warn if present (opposite of above requirement)
  • I can specify this is the checksum data source under configuration
  • I can specify this in the local .yaksums file

➡️ Resources and References

Scan a directory and compare files against canonical versions

🔤 User Story

As a developer
I can scan a directory,
So that I can compare contents against canonical versions of files for possible updates

ℹ️ Notes

  • By canonical version of file, I mean files, which are not changed from project to project
  • File::Find is awesome for traversing directories

🆗 Acceptance Criteria

  • I can locate all files in a given directory recursively
  • I can calculate checksum for a located file
  • I can compare a located file against a checksum
  • I can compare a against the checksum of a canonical file

➡️ Resources and References

Write documentation

The documentation described different aspects of the project should be added.

  • basic use
  • configuration
  • development
  • issue reporting

New capability for suppressing colorized output

🔤 User Story

As a developer
I can suppress the use of colors in output
so that output is consistent with my local terminal and visibility with my settings

ℹ️ Notes

  • Pondering whener it should be --colours or --colors for the command line option
  • the default is emitting colors, since it looks good
  • the default is configured in the script and not necessarily the configuration

🆗 Acceptance Criteria

  • I can provide --nocolor to suppress colorized output
  • I can configure color: false to suppress colorized output
  • I can provide --color to override configuration

➡️ Resources and References

  • N/A

Add Docker support

🔤 User Story

As a developer
I can build and run yak as a Docker image
so that I do not have to install the complete Perl toolchain and set of requirements

ℹ️ Notes

  • Hopefully this image can also be used for debugging in VScode
  • The image will have limitations in regard to reading configuration and data source residing outside the designated directory, perhaps this can be addressed in the future
  • Perhaps --ignoreconfig(perhaps this can be the default in Docker context?)
  • Perhaps this can be extended with a way to indicate the location of the data source (file) as long as yak does not support local presence of the data (a feature supporting a local: .yaksums is on the drawing board)

🆗 Acceptance Criteria

  • I can build a Docker image
  • It will be based on a Perl base image, preferably 5.32
  • All requirements specified in the cpanfile can be installed
  • I can run a Docker image
  • It will consume all yak command line arguments
  • I can pass a parameter, telling yak to ignore the configuration in $HOME/.config/yak/config.yml
  • I can pass a parameter telling yak to ignore the data source in $HOME/.config/yak/checksums.json
  • I can read a local .yaksums.json instead of $HOME/.config/yak/checksums.json

➡️ Resources and References

  • Please see Ebirah for inspiration

Add colors options to config, so colors can be customized

🔤 User Story

As a developer
I can customize the colors used in output
so that output suits me and my visual style

ℹ️ Notes

  • For now this is only in configuration
  • Pondering environment overwrites for configless use

🆗 Acceptance Criteria

  • I can specify a custom color for successful checks/files in the configuration
  • I can specify a custom color for failing checks/files in the configuration
  • I can specify a custom color for skipped checks/files in the configuration
  • I can specify a custom color for ignored checks/files in the configuration
  • I can specify a single or multiple custom colors, unspecified fall back to the default

➡️ Resources and References

  • N/A

Add about commandline argument

🔤 User Story

As a developer
I can invoke yak and tell it to tell about it's configuration and invocation
so that I can see what is going in

ℹ️ Notes

  • This is a variation on dry run

🆗 Acceptance Criteria

  • I can provide the command line argument: --about, it will display
  • current version number of yak
  • configuration file location/path
  • data source (file) location/path
  • invocation command line arguments, including --about
  • invocation environment (meaning the sum of configuration and invocation)

➡️ Resources and References

  • N/A

Added capabiility to fetch checksums via HTTP

🔤 User Story

As a developer
I can configure a given checksum src to be a UTL
so that output can be calculated dynamically

ℹ️ Notes

  • --checksums in the CLI interface should also be able to handle a URL in addition to a file, like so:
$ yak --checksums "https://gist.github.com/jonasbn/dc331774eb67d067981902cadd3955ba"
  • In a checksum source I can refer to a URL, like so
{
    "CODE_OF_CONDUCT.md": "https://gist.github.com/jonasbn/8efc144cdf107c4acb260178062dae05"
}

🆗 Acceptance Criteria

  • I can specify an URL on the command line using --checksums
  • --checksums is ignored if --nochecksums is provided
  • I can specify a URL in a checksums file, instead of a checksum, boolean or file path
  • If I specify a URL, the contents are downloaded and used for a checksum calculation

➡️ Resources and References

  • N/A

Add emoji options to config, so emojis can be customized

🔤 User Story

As a developer
I can customize the emojis used in output
so that output suits me

ℹ️ Notes

  • For now this is only in configuration
  • Pondering environment overwrites for configless use

🆗 Acceptance Criteria

  • I can specify a custom emoji for successful checks/files in the configuration
  • I can specify a custom emoji for failing checks/files in the configuration
  • I can specify a custom emoji for skipped checks/files in the configuration
  • I can specify a single or multiple custom emojis, unspecified fall back to the default

➡️ Resources and References

  • N/A

Add data source command line argument

🔤 User Story

As a developer
I can invoke yak and tell it to read an alternative data source
so that I experiment or use and alternative to my global data

ℹ️ Notes

  • See also --nochecksums introduced in release 0.2.0
  • Support for reading data from a URL could be interesting, like: --checksums <URL>, this could be a canonical resource, an example or gist

🆗 Acceptance Criteria

  • I can provide the command line argument: --checksums <file>
  • it will suppress the global data source: $HOME/.config/yak/.checksums.json
  • it will suppress the local data source: .yaksums.json
  • it will read the designated file
  • it will use the data from the designated file

➡️ Resources and References

  • N/A

Ignore certain files and directories so we do not campare EVERYTHING

🔤 User Story

As a developer
I can ignore certain files and directories located when I scan a directory,
So that I can eliminate these from my comparison against the canonical versions

ℹ️ Notes

  • File::Find is awesome for traversing directories
  • Perhaps .gitignore implementation pattern could be used, just as .yakignore
  • Parse::Gitignore looks interesting
  • Perhaps File::Find's preprocess option can be used

🆗 Acceptance Criteria

  • I can ignore files specified in a given directory
  • I can ignore directories in a given directory
  • I can specify patterns to be ignored in the configuration
  • Patterns in configuration can be expressed in same manner as .gitignore
  • I can add .yakignore files in a directory structure
  • An .yakignore file works from it's location and below
  • Patterns in .yakignore can be expressed in same manner as .gitignore

➡️ Resources and References

0.000138

Test2::Manual::Testing::Todo 0.000138
Test2::Manual::Tooling 0.000138
Test2::Manual::Tooling::FirstTool 0.000138
Test2::Manual::Tooling::Formatter 0.000138
Test2::Manual::Tooling::Nesting 0.000138
Test2::Manual::Tooling::Plugin::TestExit 0.000138


This issue was generated by todo based on a Todo comment in 29604b2. It's been assigned to @jonasbn because they committed the code.

New capability for disabling use of emojis in output

🔤 User Story

As a developer
I can disable the use of emojis in output
so that output is consistent with my local terminal and visibility with my settings

ℹ️ Notes

  • Considering --noemojis
  • the default is emitting emojis, since it looks good
  • the default is configured in the script and not the configuration

🆗 Acceptance Criteria

  • I can provide --noemojis to disable emojis in output
  • I can configure emojis: false to disable emojis in output
  • I can provide --emojis to override configuration

➡️ Resources and References

  • N/A

Installation of executable does not work as expected

Issue Template

Description

The installation process does not seem to install the executable yak

Bugs and Issues

Specify what version was used

Trunk/head of the repository is used.

Supply some information on the environment

zsh> perl -v

This is perl 5, version 34, subversion 0 (v5.34.0) built for darwin-2level

Copyright 1987-2021, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

Expected behaviour

yak would be available in $PATH or something, which could be added to $PATH

Actual and observed behaviour

yak does not seem to be installed at all.

Steps to reproduce the behaviour

dzil build
cd App-Yak-v1.0.0
perl Makefile.PL && make install
Generating a Unix-style Makefile
Writing Makefile for App::Yak
Writing MYMETA.yml and MYMETA.json
Skip blib/lib/App/Yak.pm (unchanged)
Manifying 1 pod document
Appending installation info to /Users/jonasbn/.perlbrew/libs/perl-5.34.0@app-yak/lib/perl5/darwin-2level/perllocal.pod

Implement handling of environment variable: NOCOLOR

🔤 User Story

As a developer
I can specify the environment variable $NO_COLOR
so that I suppress colors and support the NO_COLOR standard

ℹ️ Notes

  • This should override $CLICOLOR
  • This should NOT override $CLICOLOR_FORCE

🆗 Acceptance Criteria

  • I can suppress color output by setting the environment variable $NO_COLOR
  • The $NO_COLOR environment variable overrides $CLICOLOR
  • The $CLICOLOR_FORCE environment variable overrides $NO_COLOR
  • The --aboutflag can emit the value of $NO_COLOR if set

➡️ Resources and References

I want to be able to store and use a persistent configuration

🔤 User Story

As a developer
I can configure yak perisitently with global values
so that I do not have to apply on options on the command line for every invocation

ℹ️ Notes

  • YAML is a good option for a configuration file format
  • Currently we only aim to support *nix flavoured environments

🆗 Acceptance Criteria

  • the configuration can be stored in a file available to the user
  • adding the configuration to $HOME/.config would be beneficial
  • the file format should be easy to read
  • the file format should be easy to edit using common tools

➡️ Resources and References

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.