Added workflow for ci and release (#7)
* Completed List cmd and added API calls * Minor comments and add delete code to pass linting * Typo in descriptions * Minor comments * Validations * Validations-1 * improved branch flag validation * removed build * working after refactory with bad names * Command working, test not working * Corrected creation of service * Finalized structure using service * Deleted tests * cleanup * cleanup * cleanup * removed space with tab * aligned types in model.go * Update model.go * resolved comments * Refactor * removed long descriptions * Working incomplete tests * Completed tests * cleanup * checks * CI and release workflows * PR comments * PR comments * minor comment issue * minor comment issue * updated tests to work with workflow * Updated tests to support new option service * Improved eror handling for list * Improved error handling * Printing error in restclient * Nil in rest client * reverting changes * Release.md * Updates docs * Updates docs * Upgraded go-gh * added env in workflow * reusing rest client error * reusing sankalps fix for windows workflow * Revert "reusing sankalps fix for windows workflow" This reverts commit dfb1a94305b94b16a720bff599dba755f4a96175. * Other imp files for release * security.md * Updated contribution guidelines * Updated numberings to start with 1 * Update README.md (#15) * Update README.md * Update README.md * Update README.md * Updated contributing.md Co-authored-by: Sankalp Kotewar <kotewar@github.com> Co-authored-by: Bishal Prasad <bishal-pdmsft@github.com>
This commit is contained in:
38
.github/workflows/ci-workflow.yml
vendored
Normal file
38
.github/workflows/ci-workflow.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
name: ci-workflow
|
||||
on: [push, pull_request]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- name: Set up Go 1.18
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: 1.18
|
||||
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Restore Go modules cache
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/go/pkg/mod
|
||||
key: go-${{ runner.os }}-${{ hashFiles('go.mod') }}
|
||||
restore-keys: |
|
||||
go-${{ runner.os }}-
|
||||
|
||||
- name: Download dependencies
|
||||
run: go mod download
|
||||
|
||||
- name: Run tests
|
||||
run: go test -v ./...
|
||||
env:
|
||||
GH_TOKEN: dummy-token-to-facilitate-rest-client
|
||||
41
.github/workflows/release.yml
vendored
Normal file
41
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
name: release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Go 1.18
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: 1.18
|
||||
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Restore Go modules cache
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/go/pkg/mod
|
||||
key: go-${{ runner.os }}-${{ hashFiles('go.mod') }}
|
||||
restore-keys: |
|
||||
go-${{ runner.os }}-
|
||||
|
||||
- name: Download dependencies
|
||||
run: go mod download
|
||||
|
||||
- name: Run tests
|
||||
run: go test -v ./...
|
||||
env:
|
||||
GH_TOKEN: dummy-token-to-facilitate-rest-client
|
||||
|
||||
- uses: cli/gh-extension-precompile@v1
|
||||
with:
|
||||
go_version: "1.18"
|
||||
74
CODE_OF_CONDUCT.md
Normal file
74
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, gender identity and expression, level of experience,
|
||||
nationality, personal appearance, race, religion, or sexual identity and
|
||||
orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at opensource@github.com. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at [http://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
61
CONTRIBUTING.md
Normal file
61
CONTRIBUTING.md
Normal file
@@ -0,0 +1,61 @@
|
||||
## Contributing
|
||||
|
||||
Hi! Thanks for your interest in contributing to the GitHub Actions Cache CLI Extension!
|
||||
|
||||
We accept pull requests for bug fixes and features where we've discussed the approach in an issue and given the go-ahead for a community member to work on it. We'd also love to hear about ideas for new features as issues.
|
||||
|
||||
Please do:
|
||||
|
||||
* Check existing issues to verify that the [bug][bug issues] or [feature request][feature request issues] has not already been submitted.
|
||||
* Open an issue if things aren't working as expected.
|
||||
* Open an issue to propose a significant change.
|
||||
* Open a pull request to fix a bug.
|
||||
* Open a pull request to fix documentation about a command.
|
||||
|
||||
Please avoid:
|
||||
|
||||
* Opening pull requests for issues marked `needs-design`, `needs-investigation`, or `blocked`.
|
||||
* Adding installation instructions specifically for your OS/package manager.
|
||||
|
||||
## Building the project
|
||||
|
||||
Prerequisites:
|
||||
- Go 1.16+
|
||||
- [GitHub CLI][cli]
|
||||
|
||||
Build with:
|
||||
* Unix-like systems/ MacOS/ Windows: `go build`
|
||||
|
||||
Install the binary extension as:
|
||||
* Unix-like systems/ MacOS/ Windows: `gh extension install .` from the root folder the project.
|
||||
|
||||
Run tests with: `go test -v ./...`
|
||||
|
||||
## Submitting a pull request
|
||||
|
||||
1. Fork/Create a new branch: `git checkout -b my-branch-name`
|
||||
1. Make your change, add tests, and ensure tests pass
|
||||
1. Submit a pull request: `gh pr create --web`
|
||||
|
||||
Contributions to this project are [released][legal] to the public under the [project's open source license][license].
|
||||
|
||||
Please note that this project adheres to a [Contributor Code of Conduct][code-of-conduct]. By participating in this project you agree to abide by its terms.
|
||||
|
||||
We generate manual pages from source on every release. You do not need to submit pull requests for documentation specifically; manual pages for commands will automatically get updated after your pull requests gets accepted.
|
||||
|
||||
## Resources
|
||||
|
||||
- [How to Contribute to Open Source][]
|
||||
- [Using Pull Requests][]
|
||||
- [GitHub Help][]
|
||||
|
||||
|
||||
[bug issues]: https://github.com/actions/gh-actions-cache/issues?q=is%3Aopen+is%3Aissue+label%3Abug
|
||||
[feature request issues]: https://github.com/actions/gh-actions-cache/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement
|
||||
[legal]: https://docs.github.com/en/free-pro-team@latest/github/site-policy/github-terms-of-service#6-contributions-under-repository-license
|
||||
[license]: ./LICENSE
|
||||
[code-of-conduct]: ./CODE_OF_CONDUCT.md
|
||||
[How to Contribute to Open Source]: https://opensource.guide/how-to-contribute/
|
||||
[Using Pull Requests]: https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/about-pull-requests
|
||||
[GitHub Help]: https://docs.github.com/
|
||||
[cli]: https://cli.github.com/
|
||||
100
README.md
100
README.md
@@ -1,28 +1,100 @@
|
||||
# gh-actions-cache
|
||||
|
||||
## Local Development
|
||||
✨ A GitHub (`gh`) [CLI](https://cli.github.com/) extension to manage the GitHub Actions [caches](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows) being used in a GitHub repository.
|
||||
|
||||
1. Build the extension using
|
||||
It enables listing of active caches in a repo along with capability to filter by cache key or branch. This brings transparency, for example by showing how much storage quota a cache is consuming or which branch a cache was created for etc or how recently was the cache used.
|
||||
|
||||
go build
|
||||
It also allows deleting a corrupt, incomplete or dangling cache. A cache can be deleted by cache key. The key can be easily found either using the list capability or by looking at the cache action log in workflow run logs.
|
||||
|
||||
2. Install the extension
|
||||
This extension builds on top of [cache management](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#managing-caches) capabilities exposed by GitHub [APIs](https://docs.github.com/en/rest/actions/cache).
|
||||
|
||||
## Installation
|
||||
|
||||
1. Install the `gh` CLI - see the [installation](https://github.com/cli/cli#installation)
|
||||
|
||||
_Installation requires a minimum version (2.0.0) of the the GitHub CLI that supports extensions._
|
||||
|
||||
2. Install this extension:
|
||||
|
||||
gh extension install actions/gh-actions-cache
|
||||
|
||||
## Usage
|
||||
|
||||
gh actions-cache <command> [flags]
|
||||
|
||||
#### Commands:
|
||||
|
||||
S.No | Commands | Description
|
||||
------------- | ------------- | -------------
|
||||
1 | list | list caches with result length cap of 100
|
||||
2 | delete | delete caches with a key
|
||||
|
||||
### List
|
||||
|
||||
List active Actions caches in a repository with ability to filter and sort.
|
||||
|
||||
```
|
||||
USAGE:
|
||||
gh actions-cache list [flags]
|
||||
|
||||
|
||||
gh extension install <filepath-to-build>
|
||||
ARGUMENTS:
|
||||
No Arguments
|
||||
|
||||
|
||||
If you are already in the same directory use this `gh extension install .`
|
||||
|
||||
3. Run the command
|
||||
|
||||
gh actions-cache <command> [Flags]
|
||||
FLAGS:
|
||||
-R, --repo <[HOST/]owner/repo> Select another repository using the [HOST/]OWNER/REPO format
|
||||
-B, --branch <string> Filter by branch
|
||||
-L, --limit <int> Maximum number of items to fetch (default is 30, max limit is 100)
|
||||
--key <string> Filter by a key or key prefix
|
||||
--order <string> Order of caches returned (asc/desc)
|
||||
--sort <string> Sort fetched caches (last-used/size/created-at)
|
||||
|
||||
|
||||
## Troubleshooting
|
||||
INHERITED FLAGS
|
||||
--help Show help for command
|
||||
|
||||
1. `symlink /Users/.../gh-actions-cache /Users/.../share/gh/extensions/gh-actions-cache: file exists`
|
||||
|
||||
Uninstall the current version of extension using
|
||||
EXAMPLES:
|
||||
$ gh actions-cache list
|
||||
$ gh actions-cache list --key 564-node-a68c45df0f45f888039d32cd3a579992574e837406488e8904431197f20521d6
|
||||
$ gh actions-cache list --key 564-node- // key prefix match
|
||||
$ gh actions-cache list -B main
|
||||
$ gh actions-cache list -B refs/pull/2/merge // Use the full ref format for PR branches
|
||||
$ gh actions-cache list --limit 100
|
||||
$ gh actions-cache list --sort size --order desc // biggest caches first
|
||||
```
|
||||
|
||||
gh extension remove gh-actions-cache
|
||||
### Delete
|
||||
|
||||
Deletes actions caches with specific cache key. It asks for confirmation before deletion.
|
||||
|
||||
```
|
||||
USAGE:
|
||||
gh actions-cache delete <key> [flags]
|
||||
|
||||
|
||||
ARGUMENTS:
|
||||
key cache key which needs to be deleted
|
||||
|
||||
|
||||
FLAGS:
|
||||
-R, --repo <[HOST/]owner/repo> Select another repository using the [HOST/]OWNER/REPO format
|
||||
-B, --branch <string> Delete caches specific to branch. Use the full ref format e.g. refs/heads/main
|
||||
--confirm Confirm deletion without prompting
|
||||
|
||||
|
||||
INHERITED FLAGS
|
||||
--help Show help for command
|
||||
|
||||
|
||||
EXAMPLES:
|
||||
$ gh actions-cache delete Linux-node-f5dbf39c9d11eba80242ac13
|
||||
```
|
||||
|
||||
|
||||
> ℹ️ There could be multiple caches in a repo with same key. This can happen when different caches with same key have been created for different branches. it may also happen if the `version` property of the cache is different which usually means that cache with same key was created for different OS or with different [paths](https://github.com/actions/cache#inputs).
|
||||
|
||||
|
||||
## Contributing
|
||||
If anything feels off, or if you feel that some functionality is missing, please check out the [contributing page](CONTRIBUTING.md). There you will find instructions for sharing your feedback, building the tool locally, and submitting pull requests to the project.
|
||||
31
SECURITY.md
Normal file
31
SECURITY.md
Normal file
@@ -0,0 +1,31 @@
|
||||
Thanks for helping make GitHub safe for everyone.
|
||||
|
||||
## Security
|
||||
|
||||
GitHub takes the security of our software products and services seriously, including all of the open source code repositories managed through our GitHub organizations, such as [GitHub](https://github.com/GitHub).
|
||||
|
||||
Even though [open source repositories are outside of the scope of our bug bounty program](https://bounty.github.com/index.html#scope) and therefore not eligible for bounty rewards, we will ensure that your finding gets passed along to the appropriate maintainers for remediation.
|
||||
|
||||
## Reporting Security Issues
|
||||
|
||||
If you believe you have found a security vulnerability in any GitHub-owned repository, please report it to us through coordinated disclosure.
|
||||
|
||||
**Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.**
|
||||
|
||||
Instead, please send an email to opensource-security[@]github.com.
|
||||
|
||||
Please include as much of the information listed below as you can to help us better understand and resolve the issue:
|
||||
|
||||
* The type of issue (e.g., buffer overflow, SQL injection, or cross-site scripting)
|
||||
* Full paths of source file(s) related to the manifestation of the issue
|
||||
* The location of the affected source code (tag/branch/commit or direct URL)
|
||||
* Any special configuration required to reproduce the issue
|
||||
* Step-by-step instructions to reproduce the issue
|
||||
* Proof-of-concept or exploit code (if possible)
|
||||
* Impact of the issue, including how an attacker might exploit the issue
|
||||
|
||||
This information will help us triage your report more quickly.
|
||||
|
||||
## Policy
|
||||
|
||||
See [GitHub's Safe Harbor Policy](https://docs.github.com/en/github/site-policy/github-bug-bounty-program-legal-safe-harbor#1-safe-harbor-terms)
|
||||
30
docs/Release.md
Normal file
30
docs/Release.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# Releasing
|
||||
|
||||
Our build system automatically compiles and attaches cross-platform binaries to any git tag named `vX.Y.Z`. The changelog is [generated from git commit log](https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes).
|
||||
|
||||
Users who run official builds of `gh` on their machines will get notified about the new version within a 24 hour period.
|
||||
|
||||
To test out the build system, publish a prerelease tag with a name such as `vX.Y.Z-pre.0` or `vX.Y.Z-rc.1`. Note that such a release will still be public, but it will be marked as a "prerelease", meaning that it will never show up as a "latest" release nor trigger upgrade notifications for users.
|
||||
|
||||
## General guidelines
|
||||
|
||||
* Features to be released should be reviewed and approved at least one day prior to the release.
|
||||
* Feature releases should bump up the minor version number.
|
||||
|
||||
## Tagging a new release
|
||||
|
||||
1. `git tag v1.2.3 && git push origin v1.2.3`
|
||||
2. Wait several minutes for builds to run: <https://github.com/actions/gh-actions-cache/actions>
|
||||
3. Verify release is displayed and has correct assets: <https://github.com/actions/gh-actions-cache/releases>
|
||||
4. Scan generated release notes and optionally add a human touch by grouping items under topic sections
|
||||
6. (Optional) Delete any pre-releases related to this release
|
||||
|
||||
If the build fails, there is not a clean way to re-run it. The easiest way would be to start over by deleting the partial release on GitHub and re-publishing the tag. Note that this might be disruptive to users or tooling that were already notified about an upgrade. If a functional release and its binaries are already out there, it might be better to try to manually fix up only the specific workflow tasks that failed. Use your best judgement depending on the failure type.
|
||||
|
||||
## Release locally for debugging
|
||||
|
||||
A local release can be created for testing without creating anything official on the release page.
|
||||
|
||||
1. Make sure GoReleaser is installed: `brew install goreleaser`
|
||||
2. `goreleaser --skip-validate --skip-publish --rm-dist`
|
||||
3. Find the built products under `dist/`.
|
||||
2
go.sum
2
go.sum
@@ -81,4 +81,4 @@ gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaD
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
||||
Reference in New Issue
Block a user