11 Commits

Author SHA1 Message Date
Leah
47113d1159 Only print empty cache message in terminal output (#47)
Some checks failed
ci-workflow / build (macos-latest) (push) Has been cancelled
ci-workflow / build (ubuntu-latest) (push) Has been cancelled
ci-workflow / build (windows-latest) (push) Has been cancelled
release / release (push) Has been cancelled
only print empty cache list in terminal output
2023-01-19 03:38:15 +05:30
Deepak Dahiya
9adb9e80c2 Added conditions to print for list commands (#43)
Some checks failed
ci-workflow / build (macos-latest) (push) Has been cancelled
ci-workflow / build (ubuntu-latest) (push) Has been cancelled
ci-workflow / build (windows-latest) (push) Has been cancelled
release / release (push) Has been cancelled
2022-11-21 18:45:26 +05:30
Aparna Ravindra
18233abdce Update canary and e2e workflow to use checkout@v3 - node16 version (#41)
* Update canary.yaml and e2e_test.yml to use checkout@v3
2022-10-31 12:42:55 +05:30
Sankalp Kotewar
d3293b69e1 Added note regarding GHES support (#32)
* Added note regarding GHES support

Added a note about GHES support for the extension

* Added info regarding hostname use for GHES repos

* Implemented review comments
2022-09-20 12:00:01 +05:30
Enes
2b273da8da Fixed -L shorthand bug for list command (#33) (#34)
* Fixed -L shorthand bug for list command (#33)

* Changed function name to TestListLimitShorthandUsingIncorrectLimit
2022-09-18 12:49:38 +05:30
Sankalp Kotewar
235994ccc5 Update bug_report.md (#30)
Some checks failed
ci-workflow / build (macos-latest) (push) Has been cancelled
ci-workflow / build (ubuntu-latest) (push) Has been cancelled
ci-workflow / build (windows-latest) (push) Has been cancelled
release / release (push) Has been cancelled
* Update bug_report.md

* Added extension version list command
2022-08-17 12:39:16 +05:30
Deepak Dahiya
ccd695dfaa Fixed e2e workflow issue (#29)
* Fixed e2e workflow issue

* Updating cli version

* minor
2022-08-16 15:05:44 +05:30
Deepak Dahiya
b8890ddb4c Used go-gh table printer for listing caches (#25)
* Used go-gh table printer for listing caches

* lint

* lint

* minor

* cleanup

* cleanup

* cleanup

* cleanup

* cleanup

* cleanup

* cleanup

* cleanup

* cleanup

* cleanup

* cleanup

* cleanup

* cleanup
2022-08-11 14:15:02 +05:30
Aparna Ravindra
c196049591 Create E2E test on main branch (#24)
* Create e2e_test.yml
2022-08-04 14:17:21 +05:30
Aparna Ravindra
1aec73ad5e Update canary.yaml to fix typo (#22)
Update secret name
2022-08-03 17:17:12 +05:30
Aparna Ravindra
ebd16ae99c Workflow: Canary Test (#18)
* Create canary.yaml
2022-08-03 15:38:35 +05:30
12 changed files with 219 additions and 84 deletions

View File

@@ -9,7 +9,7 @@ assignees: ''
### Describe the bug
A clear and concise description of what the bug is. Include CLI version by typing `gh actions-cache --version` and extension version by typing `gh actions-cache --version`. <!--TODO: Implement version printing for the cache -->
A clear and concise description of what the bug is. Include CLI version by typing `gh --version` and the extension version `gh extensions list | grep actions-cache`.
### Steps to reproduce the behavior

67
.github/workflows/canary.yaml vendored Normal file
View File

@@ -0,0 +1,67 @@
name: Canary Test
on:
release:
types: [released]
schedule:
- cron: "30 18 * * *"
workflow_dispatch:
jobs:
upload:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
name: cache upload (${{ matrix.os }})
steps:
- name: Create file to cache
run: |
mkdir test-cache
echo "foo" > test-cache/test.txt
- uses: actions/cache@v3
with:
path: test-cache
key: ${{ matrix.os }}-runner-${{ github.run_number }}-${{ github.run_attempt }}
canary:
needs: upload
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
env:
CacheKey: ${{ matrix.os }}-runner-${{ github.run_number }}-${{ github.run_attempt }}
steps:
- name: checkout repo
uses: actions/checkout@v3
- name: Install extension
env:
GITHUB_TOKEN: ${{ secrets.REPO_WRITE_TOKEN }}
run: gh extensions install actions/gh-actions-cache
- name: List Command
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.REPO_WRITE_TOKEN }}
run: |
cache_found=$(gh actions-cache list --key $CacheKey --limit 100 --branch $GITHUB_REF --order desc --sort created-at | grep $CacheKey)
echo $cache_found
[[ -z "$cache_found" ]] && exit 1 || echo "Cache List Successful"
- name: Delete Command
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.REPO_WRITE_TOKEN }}
run: |
cache_delete=$(gh actions-cache delete $CacheKey --branch $GITHUB_REF --confirm | grep "Deleted 1 cache entry with key")
echo $cache_delete
[[ -z "$cache_delete" ]] && exit 1 || echo "Cache Delete Successful"
- name: Slack Notification on failure
if: failure()
uses: 8398a7/action-slack@a74b761b4089b5d730d813fbedcd2ec5d394f3af
with:
text: actions/gh-actions-cache canary failure
status: ${{ job.status }}
fields: repo,workflow,message,author,action,ref
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

81
.github/workflows/e2e_test.yml vendored Normal file
View File

@@ -0,0 +1,81 @@
name: E2E Test
on:
push:
branches:
- main
workflow_dispatch:
jobs:
upload:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
name: cache upload (${{ matrix.os }})
steps:
- name: Create file to cache
run: |
mkdir test-cache
echo "foo" > test-cache/test.txt
- uses: actions/cache@v3
with:
path: test-cache
key: ${{ matrix.os }}-runner-${{ github.run_number }}-${{ github.run_attempt }}
canary:
needs: upload
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
env:
CacheKey: ${{ matrix.os }}-runner-${{ github.run_number }}-${{ github.run_attempt }}
steps:
- name: checkout repo
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: Build the project
run: go build
- name: Install extension
env:
GITHUB_TOKEN: ${{ secrets.REPO_WRITE_TOKEN }}
run: gh extensions install .
- name: Print help
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.REPO_WRITE_TOKEN }}
run: |
gh actions-cache --help
- name: List Command
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.REPO_WRITE_TOKEN }}
run: |
cache_found=$(gh actions-cache list --key $CacheKey --limit 100 --branch $GITHUB_REF --order desc --sort created-at | grep $CacheKey)
echo $cache_found
[[ -z "$cache_found" ]] && exit 1 || echo "Cache List Successful"
- name: Delete Command
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.REPO_WRITE_TOKEN }}
run: |
cache_delete=$(gh actions-cache delete $CacheKey --branch $GITHUB_REF --confirm | grep "Deleted 1 cache entry with key")
echo $cache_delete
[[ -z "$cache_delete" ]] && exit 1 || echo "Cache Delete Successful"
- name: Slack Notification on failure
if: failure()
uses: 8398a7/action-slack@a74b761b4089b5d730d813fbedcd2ec5d394f3af
with:
text: actions/gh-actions-cache E2E test failure
status: ${{ job.status }}
fields: repo,workflow,message,author,action,ref
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

View File

@@ -15,7 +15,7 @@ jobs:
steps:
- uses: actions/setup-go@v3
with:
go-version: 1.16
go-version: 1.18
- uses: actions/checkout@v3
- name: golangci-lint
uses: golangci/golangci-lint-action@v3

View File

@@ -8,6 +8,8 @@ It also allows deleting a corrupt, incomplete or dangling cache. A cache can be
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).
**Note:** This extension currently supports github.com only, GitHub Enterprise Server is not supported currently.
## Installation
1. Install the `gh` CLI - see the [installation](https://github.com/cli/cli#installation)
@@ -97,4 +99,4 @@ EXAMPLES:
## 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.
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.

View File

@@ -8,6 +8,7 @@ import (
"github.com/actions/gh-actions-cache/service"
"github.com/actions/gh-actions-cache/types"
"github.com/spf13/cobra"
ghTerm "github.com/cli/go-gh/pkg/term"
)
func NewCmdList() *cobra.Command {
@@ -41,9 +42,13 @@ func NewCmdList() *cobra.Command {
return types.HandledError{Message: err.Error(), InnerError: err}
}
// This will be used to determine the if output is terminal
terminal := ghTerm.FromEnv()
isTerminalOutput := terminal.IsTerminalOutput()
if f.Branch == "" && f.Key == "" {
totalCacheSize, err := artifactCache.GetCacheUsage()
if err == nil && totalCacheSize > 0 {
if err == nil && totalCacheSize > 0 && isTerminalOutput {
fmt.Printf("Total caches size %s\n\n", internal.FormatCacheSize(totalCacheSize))
}
}
@@ -58,9 +63,11 @@ func NewCmdList() *cobra.Command {
totalCaches := listCacheResponse.TotalCount
caches := listCacheResponse.ActionsCaches
if len(caches) > 0 {
fmt.Printf("Showing %d of %d cache entries in %s/%s\n\n", displayedEntriesCount(len(caches), f.Limit), totalCaches, repo.Owner(), repo.Name())
if isTerminalOutput {
fmt.Printf("Showing %d of %d cache entries in %s/%s\n\n", displayedEntriesCount(len(caches), f.Limit), totalCaches, repo.Owner(), repo.Name())
}
internal.PrettyPrintCacheList(caches)
} else {
} else if isTerminalOutput {
fmt.Printf("There are no Actions caches currently present in this repo or for the provided filters\n")
}
return nil
@@ -69,7 +76,7 @@ func NewCmdList() *cobra.Command {
listCmd.Flags().StringVarP(&f.Repo, "repo", "R", "", "Select another repository for finding actions cache.")
listCmd.Flags().StringVarP(&f.Branch, "branch", "B", "", "Filter by branch")
listCmd.Flags().IntVarP(&f.Limit, "limit", "", 30, "Number of items to fetch between 1 and 100")
listCmd.Flags().IntVarP(&f.Limit, "limit", "L", 30, "Number of items to fetch between 1 and 100")
listCmd.Flags().StringVarP(&f.Key, "key", "", "", "Filter by key")
listCmd.Flags().StringVarP(&f.Order, "order", "", "", "Order of caches returned (asc/desc)")
listCmd.Flags().StringVarP(&f.Sort, "sort", "", "", "Sort fetched caches (last-used/size/created-at)")

View File

@@ -62,6 +62,18 @@ func TestListWithIncorrectLimit(t *testing.T) {
assert.True(t, gock.IsDone(), internal.PrintPendingMocks(gock.Pending()))
}
func TestListLimitShorthandUsingIncorrectLimit(t *testing.T) {
t.Cleanup(gock.Off)
cmd := NewCmdList()
cmd.SetArgs([]string{"-L", "102", "--repo", "testOrg/testRepo"})
err := cmd.Execute()
assert.NotNil(t, err)
assert.Equal(t, err, fmt.Errorf("102 is not a valid integer value for limit flag. Allowed values: 1-100"))
assert.True(t, gock.IsDone(), internal.PrintPendingMocks(gock.Pending()))
}
func TestListWithIncorrectOrder(t *testing.T) {
t.Cleanup(gock.Off)

View File

@@ -6,7 +6,7 @@ import (
"github.com/spf13/cobra"
)
const VERSION = "1.0.0"
const VERSION = "1.0.1"
var rootCmd = &cobra.Command{
Use: "gh-actions-cache",

19
go.mod
View File

@@ -5,16 +5,23 @@ go 1.18
require (
github.com/AlecAivazis/survey/v2 v2.3.5
github.com/TwiN/go-color v1.1.0
github.com/cli/go-gh v0.0.4-0.20220623035622-91ca4ef447d4
github.com/cli/go-gh v0.1.0
github.com/nleeper/goment v1.4.4
github.com/spf13/cobra v1.4.0
github.com/spf13/cobra v1.5.0
github.com/stretchr/testify v1.8.0
)
require github.com/pmezard/go-difflib v1.0.0 // indirect
require (
github.com/MakeNowJust/heredoc v1.0.0 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/mattn/go-runewidth v0.0.13 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/thlib/go-timezone-local v0.0.0-20210907160436-ef149e42d28e // indirect
)
require (
github.com/cli/safeexec v1.0.0
github.com/cli/safeexec v1.0.0 // indirect
github.com/cli/shurcooL-graphql v0.0.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 // indirect
@@ -22,13 +29,13 @@ require (
github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/mattn/go-colorable v0.1.2 // indirect
github.com/mattn/go-isatty v0.0.8
github.com/mattn/go-isatty v0.0.8 // indirect
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/tkuchiki/go-timezone v0.2.0 // indirect
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 // indirect
golang.org/x/term v0.0.0-20210503060354-a79de5458b56
golang.org/x/term v0.0.0-20210503060354-a79de5458b56 // indirect
golang.org/x/text v0.3.6 // indirect
gopkg.in/h2non/gock.v1 v1.1.2
gopkg.in/yaml.v3 v3.0.1 // indirect

26
go.sum
View File

@@ -6,13 +6,14 @@ github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63n
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
github.com/TwiN/go-color v1.1.0 h1:yhLAHgjp2iAxmNjDiVb6Z073NE65yoaPlcki1Q22yyQ=
github.com/TwiN/go-color v1.1.0/go.mod h1:aKVf4e1mD4ai2FtPifkDPP5iyoCwiK08YGzGwerjKo0=
github.com/cli/go-gh v0.0.4-0.20220623035622-91ca4ef447d4 h1:6WrekNBE2Y+Xl9OCl7vsg49SSN68hwaVryfEawQevaQ=
github.com/cli/go-gh v0.0.4-0.20220623035622-91ca4ef447d4/go.mod h1:Y/QFb/VxnXQH0W4VlP+507HVxMzQ430x8kdjUuVcono=
github.com/cli/go-gh v0.1.0 h1:kMqFmC3ECBrV2UKzlOHjNOTTchExVc5tjNHtCqk/zYk=
github.com/cli/go-gh v0.1.0/go.mod h1:eTGWl99EMZ+3Iau5C6dHyGAJRRia65MtdBtuhWc+84o=
github.com/cli/safeexec v1.0.0 h1:0VngyaIyqACHdcMNWfo6+KdUYnqEr2Sg+bSP1pdF+dI=
github.com/cli/safeexec v1.0.0/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q=
github.com/cli/shurcooL-graphql v0.0.1 h1:/9J3t9O6p1B8zdBBtQighq5g7DQRItBwuwGh3SocsKM=
github.com/cli/shurcooL-graphql v0.0.1/go.mod h1:U7gCSuMZP/Qy7kbqkk5PrqXEeDgtfG5K+W+u8weorps=
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI=
github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -29,14 +30,14 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32 h1:W6apQkHrMkS0Muv8G/TipAy/FJl/rCYT0+EuS8+Z0z4=
@@ -45,18 +46,21 @@ github.com/nleeper/goment v1.4.4 h1:GlMTpxvhueljArSunzYjN9Ri4SOmpn0Vh2hg2z/IIl8=
github.com/nleeper/goment v1.4.4/go.mod h1:zDl5bAyDhqxwQKAvkSXMRLOdCowrdZz53ofRJc4VhTo=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q=
github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g=
github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU=
github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/thlib/go-timezone-local v0.0.0-20210907160436-ef149e42d28e h1:BuzhfgfWQbX0dWzYzT1zsORLnHRv3bcRcsaUk0VmXA8=
github.com/thlib/go-timezone-local v0.0.0-20210907160436-ef149e42d28e/go.mod h1:/Tnicc6m/lsJE0irFMA0LfIwTBo4QP7A8IfyIv4zZKI=
github.com/tkuchiki/go-timezone v0.2.0 h1:yyZVHtQRVZ+wvlte5HXvSpBkR0dPYnPEIgq9qqAqltk=
github.com/tkuchiki/go-timezone v0.2.0/go.mod h1:b1Ean9v2UXtxSq4TZF0i/TU9NuoWa9hOzOKoGCV2zqY=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
@@ -64,6 +68,7 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 h1:xHms4gcpe1YE7A3yIllJXP16CMAGuqwO2lX1mTyyRRc=
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -75,7 +80,6 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY=
gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=

View File

@@ -3,11 +3,6 @@ package internal
import (
"errors"
"fmt"
"math"
"os"
"os/exec"
"strconv"
"strings"
"unicode/utf8"
"github.com/TwiN/go-color"
@@ -15,16 +10,13 @@ import (
gh "github.com/cli/go-gh"
"github.com/cli/go-gh/pkg/api"
ghRepo "github.com/cli/go-gh/pkg/repository"
"github.com/cli/safeexec"
"github.com/mattn/go-isatty"
ghTableprinter "github.com/cli/go-gh/pkg/tableprinter"
ghTerm "github.com/cli/go-gh/pkg/term"
"github.com/nleeper/goment"
"golang.org/x/term"
)
const MB_IN_BYTES = 1024 * 1024
const GB_IN_BYTES = 1024 * 1024 * 1024
const SIZE_COLUMN_WIDTH = 15
const LAST_ACCESSED_AT_COLUMN_WIDTH = 20
func GetRepo(r string) (ghRepo.Repository, error) {
if r != "" {
@@ -51,17 +43,19 @@ func FormatCacheSize(size_in_bytes float64) string {
}
func PrettyPrintCacheList(caches []types.ActionsCache) {
width, _, _ := getTerminalWidth(os.Stdout)
width = int(math.Max(float64(width), 100))
sizeWidth := SIZE_COLUMN_WIDTH // hard-coded size as the content is scoped
timeWidth := LAST_ACCESSED_AT_COLUMN_WIDTH // hard-coded size as the content is scoped
keyWidth := int(math.Floor(0.65 * float64(width-SIZE_COLUMN_WIDTH-LAST_ACCESSED_AT_COLUMN_WIDTH)))
refWidth := int(math.Floor(0.20 * float64(width-SIZE_COLUMN_WIDTH-LAST_ACCESSED_AT_COLUMN_WIDTH)))
terminal := ghTerm.FromEnv()
w, _, _ := terminal.Size()
tp := ghTableprinter.New(terminal.Out(), terminal.IsTerminalOutput(), w)
for _, cache := range caches {
var formattedRow string = getFormattedCacheInfo(cache, keyWidth, sizeWidth, refWidth, timeWidth)
fmt.Println(formattedRow)
tp.AddField(cache.Key)
tp.AddField(FormatCacheSize(cache.SizeInBytes))
tp.AddField(cache.Ref)
tp.AddField(lastAccessedTime(cache.LastAccessedAt))
tp.EndRow()
}
_ = tp.Render()
}
func PrettyPrintTrimmedCacheList(caches []types.ActionsCache) {
@@ -78,24 +72,7 @@ func PrettyPrintTrimmedCacheList(caches []types.ActionsCache) {
func lastAccessedTime(lastAccessedAt string) string {
lastAccessed, _ := goment.New(lastAccessedAt)
return fmt.Sprintf(" %s", lastAccessed.FromNow())
}
func trimOrPad(value string, maxSize int) string {
if len(value) > maxSize {
value = value[:maxSize-3] + "..."
} else {
value = value + strings.Repeat(" ", maxSize-len(value))
}
return value
}
func getFormattedCacheInfo(cache types.ActionsCache, keyWidth int, sizeWidth int, refWidth int, timeWidth int) string {
key := trimOrPad(cache.Key, keyWidth)
size := trimOrPad(fmt.Sprintf("[%s]", FormatCacheSize(cache.SizeInBytes)), sizeWidth)
ref := trimOrPad(cache.Ref, refWidth)
time := trimOrPad(lastAccessedTime(cache.LastAccessedAt), timeWidth)
return fmt.Sprintf("%s %s %s %s", key, size, ref, time)
return lastAccessed.FromNow()
}
func RedTick() string {
@@ -112,24 +89,6 @@ func PrintSingularOrPlural(count int, singularStr string, pluralStr string) stri
return fmt.Sprintf("%d %s", count, pluralStr)
}
func getTerminalWidth(f *os.File) (int, int, error) {
if !isatty.IsCygwinTerminal(f.Fd()) {
return term.GetSize(int(f.Fd()))
}
tputExe, err := safeexec.LookPath("tput")
if err != nil {
return 100, 100, nil
}
tputCmd := exec.Command(tputExe, "cols")
tputCmd.Stdin = os.Stdin
if out, err := tputCmd.Output(); err == nil {
if w, err := strconv.Atoi(strings.TrimSpace(string(out))); err == nil {
return w, 100, nil
}
}
return 100, 100, nil
}
func HttpErrorHandler(err error, errMsg404 string) types.HandledError {
var httpError api.HTTPError
if errors.As(err, &httpError) && httpError.StatusCode == 404 {

View File

@@ -1,9 +1,5 @@
package types
import (
"fmt"
)
type HandledError struct {
Message string
InnerError error
@@ -11,5 +7,5 @@ type HandledError struct {
// Allow HandledError to satisfy error interface.
func (err HandledError) Error() string {
return fmt.Sprintf(err.Message)
return err.Message
}