GithubHelp home page GithubHelp logo

inditextech / gh-sherpa Goto Github PK

View Code? Open in Web Editor NEW
48.0 1.0 2.0 175 KB

Streamline branch and pull request creation for Jira or GitHub issues from command line

License: Apache License 2.0

Makefile 1.38% Go 96.53% Shell 2.08%
gh-extension golang sherpa contributing inditex command-line

gh-sherpa's People

Contributors

hielfx avatar jorgegarciarey avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

gh-sherpa's Issues

Branch naming not working for types other than feature

Detailed description

When we try to create a PR or branch and the cli prompts us to select the type of branch, if we select the type other, instead of prompting to select among the other types (bugfix, dependency, deprecation, etc), it jumps straight to branch naming and ends up using "other" as a prefix.

Check this video:

Screen.Recording.2024-03-20.at.11.56.47.mov

Expected behaviour

When we select other in the type of branch prompt, it should offer other branch types allow the user to select among them. Like the following screenshot from a previous version of sherpa-cli:

Screenshot 2024-03-20 at 12 16 11

Generate first release

Motivation

Generate the first release in the repository, so the users can download and install the new binary.

Acceptance criteria

  • New version is released for the users to download

Add `SECURITY.md` file

Detailed description

As recommended by OpenSSF Best Pratices, we should give people instructions for reporting security vulnerabilities in your project.

One way is to add a security.md file: https://docs.github.com/en/code-security/getting-started/adding-a-security-policy-to-your-repository

For InditexTech projects, the security.md file's content is already defined. Check with the OSO (Open Source Office).

Expected behaviour

Project repository has a security.md file describing the steps to report project's vulnerabilities.

Add repolinter github action

Motivation

For ensure that some mandatory files are part of repository we can automate this with repolinter tool, this tool can be automated via github action

Acceptance criteria

  • A repolinter github action is deployed

Migrate from survey to bubbletea

Motivation

Since 24/09/2023 the Survey library we use for user interactivity has been archived and will be no longer maintained.

image
image

We could switch to bubbletean.

Acceptance criteria

  • Replace survey with bubbletea

Insecure TLS enabled by default

Motivation

Currently we have the TLS verification disabled by default, with no way to change it. We should create a configuration to disable it and make it enabled by default.

Acceptance criteria

  • Insecure TLS disabled by default
  • Configuration option to change its value

Validate configuration

Motivation

Validate the configuration before creating and initializing the services so we can check everything is correct.

Acceptance criteria

  • Loaded configuration validation
  • Use cases configuration validation
  • Other packages/services configuration validation

Version is not shown when gh extension list

Detailed description

When I execute

gh extension list

I get back

NAME REPO VERSION
gh sherpa InditexTech/gh-sherpa ad6753cb

Expected behaviour

Expected behaviour is to get back the extension version in a semVer format, in this case 1.1.0.

Get issue type tests arbitrary failing in verify action

Detailed description

Some times the test TestGetIssueType/GetIssueType_bug_with_several_labels fails in the Verify action but once you rerun the test it passes.
image

We don't know the steps to reproduce it on local yet.

Expected behaviour

The test should not fail arbitrary.

Configuration file with comments

Motivation

Create the configuration file with comments explaining each configurable field.

Acceptance criteria

  • The default configuration file is created with comments
  • Documentation is update to reflect those changes

Release workflow

Motivation

Create a release workflow that generates the release with a manual trigger.

Acceptance criteria

  • The new release is generated when running the workflow.
  • The new version is automatically selected based on the changes made.
  • The version file is updated automatically.

Get OpenSFF FLOSS Best Practices Criteria (Passing Badge)

Motivation

Nowadays good security practices are recommended in open source projects, it should be interesting to get the OpenSFF Best Practices Badge, and they have a github action that give us a fabulous sticker
https://www.bestpractices.dev/en/criteria/0

Acceptance criteria

BASICS

Basic project website content

  • The project website MUST succinctly describe what the software does (what problem does it solve?).
  • The project website MUST provide information on how to: obtain, provide feedback (as bug reports or enhancements), and contribute to the software.
  • The information on how to contribute MUST explain the contribution process (e.g., are pull requests used?)
  • The information on how to contribute SHOULD include the requirements for acceptable contributions (e.g., a reference to any required coding standard).

FLOSS license

  • The software produced by the project MUST be released as FLOSS
  • It is SUGGESTED that any required license(s) for the software produced by the project be approved by the Open Source Initiative (OSI).
  • The project MUST post the license(s) of its results in a standard location in their source repository.

Documentation

  • The project MUST provide basic documentation for the software produced by the project.
  • The project MUST provide reference documentation that describes the external interface (both input and output) of the software produced by the project.

Other

  • The project sites (website, repository, and download URLs) MUST support HTTPS using TLS.
  • The project MUST have one or more mechanisms for discussion (including proposed changes and issues) that are searchable, allow messages and topics to be addressed by URL, enable new people to participate in some of the discussions, and do not require client-side installation of proprietary software.
  • The project SHOULD provide documentation in English and be able to accept bug reports and comments about code in English.
  • The project MUST be maintained.

Change Control

Public version-controlled source repository

  • The project MUST have a version-controlled source repository that is publicly readable and has a URL.
  • The project's source repository MUST track what changes were made, who made the changes, and when the changes were made.
  • To enable collaborative review, the project's source repository MUST include interim versions for review between releases; it MUST NOT include only final releases.
  • It is SUGGESTED that common distributed version control software be used (e.g., git) for the project's source repository.

Unique version numbering

  • The project results MUST have a unique version identifier for each release intended to be used by users.
  • It is SUGGESTED that the Semantic Versioning (SemVer) or Calendar Versioning (CalVer) version numbering format be used for releases. It is SUGGESTED that those who use CalVer include a micro level value.
  • It is SUGGESTED that projects identify each release within their version control system. For example, it is SUGGESTED that those using git identify each release using git tags.

Release notes

  • The project MUST provide, in each release, release notes that are a human-readable summary of major changes in that release to help users determine if they should upgrade and what the upgrade impact will be. The release notes MUST NOT be the raw output of a version control log (e.g., the "git log" command results are not release notes). Projects whose results are not intended for reuse in multiple locations (such as the software for a single website or service) AND employ continuous delivery MAY select "N/A".
  • The release notes MUST identify every publicly known run-time vulnerability fixed in this release that already had a CVE assignment or similar when the release was created. This criterion may be marked as not applicable (N/A) if users typically cannot practically update the software themselves (e.g., as is often true for kernel updates). This criterion applies only to the project results, not to its dependencies. If there are no release notes or there have been no publicly known vulnerabilities, choose N/A. {N/A justification}

Reporting

Bug-reporting process

  • The project MUST provide a process for users to submit bug reports (e.g., using an issue tracker or a mailing list).
  • The project SHOULD use an issue tracker for tracking individual issues.
  • The project MUST acknowledge a majority of bug reports submitted in the last 2-12 months (inclusive); the response need not include a fix.
  • The project SHOULD respond to a majority (>50%) of enhancement requests in the last 2-12 months (inclusive).
  • The project MUST have a publicly available archive for reports and responses for later searching.

Vulnerability report process

  • The project MUST publish the process for reporting vulnerabilities on the project site.
  • If private vulnerability reports are supported, the project MUST include how to send the information in a way that is kept private.
  • The project's initial response time for any vulnerability report received in the last 6 months MUST be less than or equal to 14 days.

Quality

Working build system

  • If the software produced by the project requires building for use, the project MUST provide a working build system that can automatically rebuild the software from source code.
  • It is SUGGESTED that common tools be used for building the software.
  • The project SHOULD be buildable using only FLOSS tools.

Automated test suite

  • The project MUST use at least one automated test suite that is publicly released as FLOSS (this test suite may be maintained as a separate FLOSS project). The project MUST clearly show or document how to run the test suite(s) (e.g., via a continuous integration (CI) script or via documentation in files such as BUILD.md, README.md, or CONTRIBUTING.md).
  • A test suite SHOULD be invocable in a standard way for that language.
  • It is SUGGESTED that the test suite cover most (or ideally all) the code branches, input fields, and functionality.
  • It is SUGGESTED that the project implement continuous integration (where new or changed code is frequently integrated into a central code repository and automated tests are run on the result).

New functionality testing

  • The project MUST have a general policy (formal or not) that as major new functionality is added to the software produced by the project, tests of that functionality should be added to an automated test suite.
  • The project MUST have evidence that the test_policy for adding tests has been adhered to in the most recent major changes to the software produced by the project.
  • It is SUGGESTED that this policy on adding tests (see test_policy) be documented in the instructions for change proposals.

Warning flags

  • The project MUST enable one or more compiler warning flags, a "safe" language mode, or use a separate "linter" tool to look for code quality errors or common simple mistakes, if there is at least one FLOSS tool that can implement this criterion in the selected language.
  • The project MUST address warnings.
  • It is SUGGESTED that projects be maximally strict with warnings in the software produced by the project, where practical.

Security

Secure development knowledge

  • The project MUST have at least one primary developer who knows how to design secure software.
  • At least one of the project's primary developers MUST know of common kinds of errors that lead to vulnerabilities in this kind of software, as well as at least one method to counter or mitigate each of them.

Use basic good cryptographic practices

  • The software produced by the project MUST use, by default, only cryptographic protocols and algorithms that are publicly published and reviewed by experts (if cryptographic protocols and algorithms are used).
  • If the software produced by the project is an application or library, and its primary purpose is not to implement cryptography, then it SHOULD only call on software specifically designed to implement cryptographic functions; it SHOULD NOT re-implement its own.
  • All functionality in the software produced by the project that depends on cryptography MUST be implementable using FLOSS.
  • The security mechanisms within the software produced by the project MUST use default keylengths that at least meet the NIST minimum requirements through the year 2030 (as stated in 2012). It MUST be possible to configure the software so that smaller keylengths are completely disabled.
  • The default security mechanisms within the software produced by the project MUST NOT depend on broken cryptographic algorithms (e.g., MD4, MD5, single DES, RC4, Dual_EC_DRBG), or use cipher modes that are inappropriate to the context, unless they are necessary to implement an interoperable protocol (where the protocol implemented is the most recent version of that standard broadly supported by the network ecosystem, that ecosystem requires the use of such an algorithm or mode, and that ecosystem does not offer any more secure alternative). The documentation MUST describe any relevant security risks and any known mitigations if these broken algorithms or modes are necessary for an interoperable protocol.
  • The default security mechanisms within the software produced by the project SHOULD NOT depend on cryptographic algorithms or modes with known serious weaknesses (e.g., the SHA-1 cryptographic hash algorithm or the CBC mode in SSH).
  • The security mechanisms within the software produced by the project SHOULD implement perfect forward secrecy for key agreement protocols so a session key derived from a set of long-term keys cannot be compromised if one of the long-term keys is compromised in the future.
  • If the software produced by the project causes the storing of passwords for authentication of external users, the passwords MUST be stored as iterated hashes with a per-user salt by using a key stretching (iterated) algorithm (e.g., Argon2id, Bcrypt, Scrypt, or PBKDF2). See also OWASP Password Storage Cheat Sheet).
  • The security mechanisms within the software produced by the project MUST generate all cryptographic keys and nonces using a cryptographically secure random number generator, and MUST NOT do so using generators that are cryptographically insecure.

Secured delivery against man-in-the-middle (MITM) attacks

  • The project MUST use a delivery mechanism that counters MITM attacks. Using https or ssh+scp is acceptable.
  • A cryptographic hash (e.g., a sha1sum) MUST NOT be retrieved over http and used without checking for a cryptographic signature.

Publicly known vulnerabilities fixed

  • There MUST be no unpatched vulnerabilities of medium or higher severity that have been publicly known for more than 60 days.
  • Projects SHOULD fix all critical vulnerabilities rapidly after they are reported.

Other security issues

  • The public repositories MUST NOT leak a valid private credential (e.g., a working password or private key) that is intended to limit public access.

Analysis

Static code analysis

  • At least one static code analysis tool (beyond compiler warnings and "safe" language modes) MUST be applied to any proposed major production release of the software before its release, if there is at least one FLOSS tool that implements this criterion in the selected language.
  • It is SUGGESTED that at least one of the static analysis tools used for the static_analysis criterion include rules or approaches to look for common vulnerabilities in the analyzed language or environment.
  • All medium and higher severity exploitable vulnerabilities discovered with static code analysis MUST be fixed in a timely way after they are confirmed.
  • It is SUGGESTED that static source code analysis occur on every commit or at least daily.

Dynamic code analysis

  • It is SUGGESTED that at least one dynamic analysis tool be applied to any proposed major production release of the software before its release.
  • It is SUGGESTED that if the software produced by the project includes software written using a memory-unsafe language (e.g., C or C++), then at least one dynamic tool (e.g., a fuzzer or web application scanner) be routinely used in combination with a mechanism to detect memory safety problems such as buffer overwrites. If the project does not produce software written in a memory-unsafe language, choose "not applicable" (N/A).
  • It is SUGGESTED that the project use a configuration for at least some dynamic analysis (such as testing or fuzzing) which enables many assertions. In many cases these assertions should not be enabled in production builds.
  • All medium and higher severity exploitable vulnerabilities discovered with dynamic code analysis MUST be fixed in a timely way after they are confirmed.

Warns about duplicated branches but that's not the case

Detailed description

When running the create pr command a second time, it warns that the branch already exists, even when I indicated a different branch name and that's not the case. See example below with "The remote branch already exists, skipping creation...":

โžœ  app-app1 git:(documentation/GH-199-test-docs) gh sherpa cpr -i 199              

=> Running create-pr command in Sherpa.

WARNING: there is already a local branch named documentation/GH-199-test-docs for this issue
? Do you want to use this branch to create the pull request No
? Label 'kind/documentation' found. What type of branch name do you want to create? documentation
? Please, write one additional description (optional). Truncate to 22 chars: test-docs-2

A new pull request is going to be created from documentation/GH-199-test-docs-2 to main branch
? Do you want to continue? Yes
The remote branch already exists, skipping creation...

The pull request https://github.com/inditex/app-app1/pull/201 have been created!
You are now working on the branch documentation/GH-199-test-docs-2

Expected behaviour

Do not warn, as the branch does not exist.

Add REUSE Compliance workflow

Motivation

For ensure correct licensing of code reuse is a great tool and it can be automated via github action, following reuse rules we get assurance that our code is perfectly tagged

Acceptance criteria

  • A reuse github action is running

Add Copyright and License in `.go` files

Motivation

Add Copyright and LICENSE for each Golang file

// SPDX-FileCopyrightText: 2023 INDITEX S.A
//
// SPDX-License-Identifier: Apache-2.0

Acceptance criteria

  • Any Golang file must have this header.

Pull Request ID as Issue ID

Detailed description

If you pass a Pull Request ID as the --issue flag, it will create another Pull Request.

We should check if the given ID is from a Pull Request or an Issue and force the Issue one.

Expected behaviour

When given a pull request ID, the CLI should tell the user and stop the execution.

Improve and update documentation

Motivation

Update documentation with up-to-date flow diagrams and new information.

Acceptance criteria

  • Flow diagrams are updated based on the use case
  • Update the documentation in the doc repository
  • Documentation in the repository
  • How to build, test and develop the CLI
  • How to configure the CLI

Remove license from files and use a folder license approach

Motivation

Remove the "license header per file" approach and move a "directory based" one to prevent file regeneration and improve maintainability.

Acceptance criteria

  • License header is removed from files inside directories.
  • go files in the root directory keep the license header.

404 when accessing configuration link

Detailed description

The configuration URL in the sherpa generated config points to non existent file, giving a 404 response.
image

Expected behaviour

It correctly links to the configuration section

Main branch analysis

Motivation

Currently we don't have the analysis working on the main branch, only the pull requests.

Acceptance criteria

  • Main branch sonar report is submitted

Allow branch prefix with issue type mapping

Motivation

Create a configuration section that maps the branch prefixes with specific issue types.

E.g.:

  • Feature -> feat -> feat/....
  • Bugfix-> bug -> bug/...

Note: What happens when there's a collision?

Acceptance criteria

  • Configuration option to configure the branch prefix
  • The branch is created with the corresponding preffix

Add Jira issue type label in the generated pull request

Motivation

Add the appropriated kind/* label to the pull request so we can use them directly from it.

Acceptance criteria

  • The appropriated kind/* label is assigned in the generated pull requests based on the Jira issue type.

Add release workflow and Sonar in `main` branch

Description

Add a release workflow triggering from manual dispatch. This workflow'll responsible for:

  • Publish a new release with the distributables.
  • Generate a tag

Besides that, we need to run Sonar analysis when a pull request is merged to main branch.

OpenSSF best practices compliant

Motivation

Follow the best practices from OpenSSF and automate it with GH Actions.

Useful links:

Acceptance criteria

  • A check list of tasks to be done to assume the issue addressed

Prioritize issue types

Motivation

Currently we don't have a to prioritize GH Sherpa issue types.

In case an issue has several labels associated to several issue types, there should be a way to prioritize one issue type over the others.

One way to achieve this could be creating a new configuration (or inside the current branches one) so we can provide a way to configure this priority, using (for example) a list:

...
branches:
  issue_types_priority: ["bugfix", "feature", "refactoring", "documentation", ...]

Acceptance criteria

  • A check list of tasks to be done to assume the issue addressed

File based hierarchy configuration

Motivation

Currently we have only one configuration file located in the user's home directory. A better approach would be to create a file hierarchy for each supported operating system, so the users could have different configurations for each projects, with a general one.

This configuration should be merged (instead of replaced) so the users can override some of the configuration options.

Example of hierarchy:

  1. Environment variable
  2. Project
  3. Home
  4. System
  5. ...

Acceptance criteria

  • Users can define several configurations files and they are merged on a hierarchical manner.
  • Configuration is merged and override some of the field, instad of all of them.

Branch Name Length Control Configurable

Motivation

The current branch naming validation, which combines the GitHub project name with the branch name, often leads to branch names being unnecessarily short, particularly when the project name is already lengthy. This limitation often limit the ability to put a descriptive name in the branch, making it difficult to adequately convey their purpose or content. To overcome this limitation, it is crucial to provide users with the flexibility to utilize a sufficient number of characters to accurately describe their branches.

Proposed Solution

Implement a configurable variable that enables users to set the maximum length for branch names. This feature would offer users the flexibility to establish a suitable length, thereby ensuring they possess a satisfactory number of characters to precisely name their branches.

Acceptance criteria

  • Implementation of the configuration variable to define the maximum branch name length.
  • Update the default configuration to include the current value as default.
  • Update the configuration documentation to include this variable.

Validate configuration

Motivation

Validate the configuration to avoid side effects when running the application.

Acceptance criteria

  • GitHub issue labels values must be unique.
  • Jira issue type IDs values bust be unique.
  • Jira auth host as URL if set.
  • Issue types validation for map types
  • mapstructure WeakType configuration

Extract interactive flag to a global level

Motivation

Extract the interactive (useDefaultValues) in the root command so we avoid passing it to each sub command

Acceptance criteria

  • A check list of tasks to be done to assume the issue addressed

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.