├── .github
└── workflows
│ └── rust.yml
├── .gitignore
├── Cargo.lock
├── Cargo.toml
├── README.md
├── ghtool
├── .gitignore
├── Cargo.lock
├── Cargo.toml
├── build.rs
├── github.graphql
├── hurl
│ └── github-device-flow
├── justfile
└── src
│ ├── bin
│ └── main.rs
│ ├── cache.rs
│ ├── cli.rs
│ ├── commands
│ ├── auth
│ │ ├── login.rs
│ │ ├── logout.rs
│ │ └── mod.rs
│ ├── build
│ │ ├── mod.rs
│ │ └── tsc.rs
│ ├── command.rs
│ ├── lint
│ │ ├── eslint.rs
│ │ └── mod.rs
│ ├── mod.rs
│ └── test
│ │ ├── jest.rs
│ │ └── mod.rs
│ ├── git.rs
│ ├── github
│ ├── auth_client.rs
│ ├── client.rs
│ ├── current_user.graphql
│ ├── current_user.rs
│ ├── mod.rs
│ ├── pull_request_for_branch.graphql
│ ├── pull_request_for_branch.rs
│ ├── pull_request_status_checks.graphql
│ ├── pull_request_status_checks.rs
│ ├── types.rs
│ └── wait_for_pr_checks.rs
│ ├── lib.rs
│ ├── repo_config.rs
│ ├── setup.rs
│ ├── spinner.rs
│ ├── term.rs
│ └── token_store.rs
├── ghtool_devtools
├── Cargo.toml
└── src
│ └── bin
│ └── parse_jest_log.rs
└── github_schema
├── Cargo.toml
├── github.graphql
└── src
└── lib.rs
/.github/workflows/rust.yml:
--------------------------------------------------------------------------------
1 | name: Build and test
2 |
3 | on:
4 | push:
5 | branches: ["master"]
6 | pull_request:
7 | branches: ["master"]
8 |
9 | env:
10 | CARGO_TERM_COLOR: always
11 |
12 | jobs:
13 | build:
14 | runs-on: ubuntu-latest
15 |
16 | steps:
17 | - uses: actions/checkout@v3
18 | - name: Build
19 | run: cargo build --verbose
20 | - name: Run tests
21 | run: cargo test --verbose
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 |
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [workspace]
2 | members = [
3 | "ghtool",
4 | "ghtool_devtools",
5 | "github_schema"
6 | ]
7 | resolver = "2"
8 |
9 | default-members = [
10 | "ghtool"
11 | ]
12 |
13 | [profile.dev]
14 | debug = 0
15 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ghtool
2 |
3 | [![Crates.io][crates-badge]][crates-url]
4 | ![rust][build-badge]
5 |
6 | `ghtool` is a CLI tool designed to simplify interaction with GitHub Actions,
7 | particularly when it comes to checking for test failures, linting issues, and
8 | build errors. It provides aggregated view of these issues without having to
9 | manually go through logs or GitHub's user interface. This is especially helpful
10 | in large codebases where tests are distributed across multiple jobs.
11 |
12 |
13 |
14 | See the [demo](#demo).
15 |
16 | ## Features
17 |
18 | - List failing tests across all jobs, currently only for Jest
19 | - List linting issues across all jobs, currently only for ESLint
20 | - List build errors across all jobs, currently only for TypeScript
21 | - With `all` subcommand, wait for checks to complete and list test, lint or build errors
22 |
23 | ## Installation
24 |
25 | Rust toolchain is required. Install it from [rustup.rs](https://rustup.rs/).
26 |
27 | ```sh
28 | cargo install ghtool
29 | ```
30 |
31 | ## Setup
32 |
33 | `ghtool` requires a GitHub access token to access the GitHub API. The token is
34 | stored in the system keychain. The token is strictly used by `ghtool` for
35 | accessing the GitHub API to accomplish the tasks it's designed for. The token
36 | is not used for any other purpose.
37 |
38 | To authenticate `ghtool` with GitHub API's OAuth flow, run:
39 |
40 | ```sh
41 | ght login
42 | ```
43 |
44 | Alternatively, you may provide a [personal access token][personal-access-token]
45 | with `repo` scope using `--stdin` parameter.
46 |
47 | ```sh
48 | pbpaste | ght login --stdin
49 | ```
50 |
51 | For details on why the `repo` scope is needed: [On required permissions](#on-required-permissions)
52 |
53 | ## Usage
54 |
55 | The tool is installed as executable `ght` for ease of use.
56 |
57 | The tool is intended to be run in a repository, as it uses the current working
58 | directory to determine the repository to operate on. The current branch is used
59 | to determine which pull request to query.
60 |
61 | ```
62 | Usage: ght [OPTIONS] [COMMAND]
63 |
64 | Commands:
65 | test Get the failing tests for the current branch's pull request's checks
66 | lint Get lint issues for the current branch's pull request's checks
67 | build Get build issues for the current branch's pull request's checks
68 | all Wait for checks to complete and run all test, lint and build together
69 | login Authenticate ghtool with GitHub API
70 | logout Deauthenticate ghtool with GitHub API
71 | help Print this message or the help of the given subcommand(s)
72 |
73 | Options:
74 | -v, --verbose Print verbose output
75 | -b, --branch Target branch; defaults to current branch
76 | -h, --help Print help
77 | -V, --version Print version
78 | ```
79 |
80 | ## Configuration
81 |
82 | The `.ghtool.toml` configuration file in your repository root is required. The
83 | file consists of three optional sections: `test`, `lint`, and `build`. Each
84 | section is used to configure the corresponding functionality of `ghtool`.
85 |
86 | ### `test`
87 |
88 | - `job_pattern`: Regular expression to match test job names.
89 | - `tool`: Test runner used in tests. Determines how logs are parsed. Only
90 | "jest" is currently supported.
91 |
92 | ### `lint`
93 |
94 | - `job_pattern`: Regular expression to match job names for linting.
95 | - `tool`: Lint tool used in the checks. Determines how logs are parsed. Only
96 | "eslint" is currently supported.
97 |
98 | ### `build`
99 |
100 | - `job_pattern`: Regular expression to match build job names.
101 | - `tool`: Build tool used in matching jobs. Determines how logs are parsed.
102 | Only "tsc" is currently supported.
103 |
104 | ### Example
105 |
106 | Here's an example `.ghtool.toml` file:
107 |
108 | ```toml
109 | [test]
110 | job_pattern = "(Unit|Integration|End-to-end) tests sharded"
111 | tool = "jest"
112 |
113 | [lint]
114 | job_pattern = "Lint"
115 | tool = "eslint"
116 |
117 | [build]
118 | job_pattern = "Typecheck"
119 | tool = "tsc"
120 | ```
121 |
122 | ## Example usage
123 |
124 | ### Check failing tests
125 |
126 | ```
127 | % ght test
128 | ┌─────────────────────────────────────────────────────────────────────────────┐
129 | │ Job: Unit tests sharded (2) │
130 | │ Url: https://github.com/org/repo/actions/runs/5252627921/jobs/9488888294 │
131 | └─────────────────────────────────────────────────────────────────────────────┘
132 | FAIL src/components/MyComponent/MyComponent.test.tsx
133 | ● Test suite failed to run
134 | Error: Cannot read property 'foo' of undefined
135 |
136 | 1 | import React from 'react';
137 | 2 | import { render } from '@testing-library/react';
138 | > 3 | import MyComponent from './MyComponent';
139 | | ^
140 | 4 |
141 | 5 | test('renders learn react link', () => {
142 | 6 | const { getByText } = render();
143 |
144 | ┌─────────────────────────────────────────────────────────────────────────────┐
145 | │ Job: Unit tests sharded (3) │
146 | │ Url: https://github.com/org/repo/actions/runs/5252627921/jobs/9488888295 │
147 | └─────────────────────────────────────────────────────────────────────────────┘
148 | FAIL src/components/AnotherComponent/AnotherComponent.test.tsx
149 | ● Test suite failed to run
150 | ...
151 | ```
152 |
153 | ### Check lint issues
154 |
155 | ```
156 | % ght lint
157 | ┌─────────────────────────────────────────────────────────────────────────────┐
158 | │ Job: Lint │
159 | │ Url: https://github.com/org/repo/actions/runs/5252627921/jobs/9488888294 │
160 | └─────────────────────────────────────────────────────────────────────────────┘
161 | @org/module:lint: /path/to/work/directory/src/components/component-directory/subcomponent-file/index.tsx
162 | @org/module:lint: 99:54 warning Unexpected any. Specify a different type @typescript-eslint/no-explicit-any
163 | @org/module:lint: 109:46 warning Unexpected any. Specify a different type @typescript-eslint/no-explicit-any
164 | @org/module:lint: 143:59 warning Unexpected any. Specify a different type @typescript-eslint/no-explicit-any
165 |
166 | @org/module:lint: /path/to/work/directory/src/components/another-component/ComponentTest.spec.tsx
167 | @org/module:lint: 30:33 warning Forbidden non-null assertion @typescript-eslint/no-non-null-assertion
168 |
169 | @org/another-module:lint: /path/to/work/directory/src/components/DifferentComponent/ComponentTest.spec.tsx
170 | @org/another-module:lint: 2:18 error 'waitFor' is defined but never used @typescript-eslint/no-unused-vars
171 | ```
172 |
173 | ### Run tests for failing test files
174 |
175 | ```sh
176 | % ght test --files | xargs yarn test
177 | yarn run v1.22.19
178 | $ NODE_ENV=test node ./node_modules/.bin/jest src/moduleA.test.ts src/moduleB.test.ts
179 | ...
180 | ```
181 |
182 | ## Demo
183 |
184 | https://github.com/raine/ghtool/assets/11027/13a012ac-a854-48a0-b514-9fcbd02c02aa
185 |
186 | ## On required permissions
187 |
188 | The tool currently uses Github's OAuth device flow to authenticate users. To
189 | access workflow job logs through OAuth, which lacks fine-grained permissions,
190 | [the repo scope is required][job-logs-docs], granting scary amount of
191 | permissions. Incidentally, the official GitHub CLI, which I used as reference,
192 | also uses OAuth flow with the `repo` scope and more
193 | ([screenshot][gh-auth-logs]).
194 |
195 | Any ideas on how to improve this are appreciated.
196 |
197 | ## Changelog
198 |
199 | ## 0.10.6 (02.06.2024)
200 |
201 | - jest: Handle more cases with ANSI colors.
202 |
203 | ## 0.10.5 (12.05.2024)
204 |
205 | - jest: Handle colored output.
206 |
207 | ## 0.10.3 (11.05.2024)
208 |
209 | - jest: Allow parsing logs where jest runs using docker-compose.
210 |
211 | ## 0.10.2 (19.09.2023)
212 |
213 | - Fix duplicate test errors in output with `test`.
214 |
215 | ## 0.10.1 (13.09.2023)
216 |
217 | - Print errors as soon as first the pending job fails, i.e. don't wait for all
218 | to complete.
219 |
220 | ## 0.10.0 (04.09.2023)
221 |
222 | - The `test`, `build` and `lint` subcommands now wait for pending jobs the same
223 | way as `all` subcommand.
224 |
225 | ## 0.9.0 (29.08.2023)
226 |
227 | - Added a way to login with a provided access token.
228 |
229 | ## 0.8.0 (27.08.2023)
230 |
231 | - Added `ght all` subcommand.
232 |
233 | ## 0.7.2 (26.08.2023)
234 |
235 | - Allow running commands from subdirectories within a Git repository.
236 |
237 | ## 0.7.0 (26.08.2023)
238 |
239 | - Renamed `typecheck` command to `build`.
240 | - Renamed `tests` command to `test`.
241 |
242 | [crates-badge]: https://img.shields.io/crates/v/ghtool.svg
243 | [crates-url]: https://crates.io/crates/ghtool
244 | [build-badge]: https://github.com/raine/ghtool/actions/workflows/rust.yml/badge.svg
245 | [job-logs-docs]: https://docs.github.com/en/rest/actions/workflow-jobs?apiVersion=2022-11-28#download-job-logs-for-a-workflow-run
246 | [gh-auth-logs]: https://github.com/raine/ghtool/assets/11027/c5b86639-07d0-4737-a2bc-519ead2f3b9f
247 | [personal-access-token]: https://github.com/settings/tokens
248 |
--------------------------------------------------------------------------------
/ghtool/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 |
--------------------------------------------------------------------------------
/ghtool/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 3
4 |
5 | [[package]]
6 | name = "Inflector"
7 | version = "0.11.4"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
10 |
11 | [[package]]
12 | name = "addr2line"
13 | version = "0.19.0"
14 | source = "registry+https://github.com/rust-lang/crates.io-index"
15 | checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
16 | dependencies = [
17 | "gimli",
18 | ]
19 |
20 | [[package]]
21 | name = "adler"
22 | version = "1.0.2"
23 | source = "registry+https://github.com/rust-lang/crates.io-index"
24 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
25 |
26 | [[package]]
27 | name = "aliasable"
28 | version = "0.1.3"
29 | source = "registry+https://github.com/rust-lang/crates.io-index"
30 | checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd"
31 |
32 | [[package]]
33 | name = "android-tzdata"
34 | version = "0.1.1"
35 | source = "registry+https://github.com/rust-lang/crates.io-index"
36 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
37 |
38 | [[package]]
39 | name = "android_system_properties"
40 | version = "0.1.5"
41 | source = "registry+https://github.com/rust-lang/crates.io-index"
42 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
43 | dependencies = [
44 | "libc",
45 | ]
46 |
47 | [[package]]
48 | name = "arc-swap"
49 | version = "1.6.0"
50 | source = "registry+https://github.com/rust-lang/crates.io-index"
51 | checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
52 |
53 | [[package]]
54 | name = "ascii"
55 | version = "0.9.3"
56 | source = "registry+https://github.com/rust-lang/crates.io-index"
57 | checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e"
58 |
59 | [[package]]
60 | name = "async-trait"
61 | version = "0.1.68"
62 | source = "registry+https://github.com/rust-lang/crates.io-index"
63 | checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
64 | dependencies = [
65 | "proc-macro2",
66 | "quote",
67 | "syn 2.0.18",
68 | ]
69 |
70 | [[package]]
71 | name = "autocfg"
72 | version = "1.1.0"
73 | source = "registry+https://github.com/rust-lang/crates.io-index"
74 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
75 |
76 | [[package]]
77 | name = "backtrace"
78 | version = "0.3.67"
79 | source = "registry+https://github.com/rust-lang/crates.io-index"
80 | checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
81 | dependencies = [
82 | "addr2line",
83 | "cc",
84 | "cfg-if",
85 | "libc",
86 | "miniz_oxide",
87 | "object",
88 | "rustc-demangle",
89 | ]
90 |
91 | [[package]]
92 | name = "base64"
93 | version = "0.13.1"
94 | source = "registry+https://github.com/rust-lang/crates.io-index"
95 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
96 |
97 | [[package]]
98 | name = "base64"
99 | version = "0.21.2"
100 | source = "registry+https://github.com/rust-lang/crates.io-index"
101 | checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
102 |
103 | [[package]]
104 | name = "bitflags"
105 | version = "1.3.2"
106 | source = "registry+https://github.com/rust-lang/crates.io-index"
107 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
108 |
109 | [[package]]
110 | name = "bumpalo"
111 | version = "3.13.0"
112 | source = "registry+https://github.com/rust-lang/crates.io-index"
113 | checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
114 |
115 | [[package]]
116 | name = "byteorder"
117 | version = "1.4.3"
118 | source = "registry+https://github.com/rust-lang/crates.io-index"
119 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
120 |
121 | [[package]]
122 | name = "bytes"
123 | version = "1.4.0"
124 | source = "registry+https://github.com/rust-lang/crates.io-index"
125 | checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
126 |
127 | [[package]]
128 | name = "cc"
129 | version = "1.0.79"
130 | source = "registry+https://github.com/rust-lang/crates.io-index"
131 | checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
132 |
133 | [[package]]
134 | name = "cfg-if"
135 | version = "1.0.0"
136 | source = "registry+https://github.com/rust-lang/crates.io-index"
137 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
138 |
139 | [[package]]
140 | name = "chrono"
141 | version = "0.4.26"
142 | source = "registry+https://github.com/rust-lang/crates.io-index"
143 | checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
144 | dependencies = [
145 | "android-tzdata",
146 | "iana-time-zone",
147 | "num-traits",
148 | "serde",
149 | "winapi",
150 | ]
151 |
152 | [[package]]
153 | name = "color-eyre"
154 | version = "0.6.2"
155 | source = "registry+https://github.com/rust-lang/crates.io-index"
156 | checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204"
157 | dependencies = [
158 | "backtrace",
159 | "color-spantrace",
160 | "eyre",
161 | "indenter",
162 | "once_cell",
163 | "owo-colors",
164 | "tracing-error",
165 | ]
166 |
167 | [[package]]
168 | name = "color-spantrace"
169 | version = "0.2.0"
170 | source = "registry+https://github.com/rust-lang/crates.io-index"
171 | checksum = "1ba75b3d9449ecdccb27ecbc479fdc0b87fa2dd43d2f8298f9bf0e59aacc8dce"
172 | dependencies = [
173 | "once_cell",
174 | "owo-colors",
175 | "tracing-core",
176 | "tracing-error",
177 | ]
178 |
179 | [[package]]
180 | name = "combine"
181 | version = "3.8.1"
182 | source = "registry+https://github.com/rust-lang/crates.io-index"
183 | checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680"
184 | dependencies = [
185 | "ascii",
186 | "byteorder",
187 | "either",
188 | "memchr",
189 | "unreachable",
190 | ]
191 |
192 | [[package]]
193 | name = "core-foundation"
194 | version = "0.9.3"
195 | source = "registry+https://github.com/rust-lang/crates.io-index"
196 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
197 | dependencies = [
198 | "core-foundation-sys",
199 | "libc",
200 | ]
201 |
202 | [[package]]
203 | name = "core-foundation-sys"
204 | version = "0.8.4"
205 | source = "registry+https://github.com/rust-lang/crates.io-index"
206 | checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
207 |
208 | [[package]]
209 | name = "counter"
210 | version = "0.5.7"
211 | source = "registry+https://github.com/rust-lang/crates.io-index"
212 | checksum = "2d458e66999348f56fd3ffcfbb7f7951542075ca8359687c703de6500c1ddccd"
213 | dependencies = [
214 | "num-traits",
215 | ]
216 |
217 | [[package]]
218 | name = "cynic"
219 | version = "3.0.2"
220 | source = "registry+https://github.com/rust-lang/crates.io-index"
221 | checksum = "93fac5d6a53524745411ddb53bd4801a849566bba4f6898b804158612cc56326"
222 | dependencies = [
223 | "cynic-proc-macros",
224 | "ref-cast",
225 | "serde",
226 | "serde_json",
227 | "static_assertions",
228 | "thiserror",
229 | ]
230 |
231 | [[package]]
232 | name = "cynic-codegen"
233 | version = "3.0.2"
234 | source = "registry+https://github.com/rust-lang/crates.io-index"
235 | checksum = "722fb3cf6594afc99eba80bc9fa2747a997b6f5a0051b4d8752976b9cc178350"
236 | dependencies = [
237 | "counter",
238 | "darling",
239 | "graphql-parser",
240 | "once_cell",
241 | "ouroboros",
242 | "proc-macro2",
243 | "quote",
244 | "strsim",
245 | "syn 1.0.109",
246 | "thiserror",
247 | ]
248 |
249 | [[package]]
250 | name = "cynic-proc-macros"
251 | version = "3.0.2"
252 | source = "registry+https://github.com/rust-lang/crates.io-index"
253 | checksum = "c2b0899572fc3bd0e9cbb5520561c8074ac7343490ff3804d007eb0df15534ed"
254 | dependencies = [
255 | "cynic-codegen",
256 | "quote",
257 | "syn 1.0.109",
258 | ]
259 |
260 | [[package]]
261 | name = "darling"
262 | version = "0.14.4"
263 | source = "registry+https://github.com/rust-lang/crates.io-index"
264 | checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
265 | dependencies = [
266 | "darling_core",
267 | "darling_macro",
268 | ]
269 |
270 | [[package]]
271 | name = "darling_core"
272 | version = "0.14.4"
273 | source = "registry+https://github.com/rust-lang/crates.io-index"
274 | checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
275 | dependencies = [
276 | "fnv",
277 | "ident_case",
278 | "proc-macro2",
279 | "quote",
280 | "strsim",
281 | "syn 1.0.109",
282 | ]
283 |
284 | [[package]]
285 | name = "darling_macro"
286 | version = "0.14.4"
287 | source = "registry+https://github.com/rust-lang/crates.io-index"
288 | checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
289 | dependencies = [
290 | "darling_core",
291 | "quote",
292 | "syn 1.0.109",
293 | ]
294 |
295 | [[package]]
296 | name = "doc-comment"
297 | version = "0.3.3"
298 | source = "registry+https://github.com/rust-lang/crates.io-index"
299 | checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
300 |
301 | [[package]]
302 | name = "either"
303 | version = "1.8.1"
304 | source = "registry+https://github.com/rust-lang/crates.io-index"
305 | checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
306 |
307 | [[package]]
308 | name = "eyre"
309 | version = "0.6.8"
310 | source = "registry+https://github.com/rust-lang/crates.io-index"
311 | checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb"
312 | dependencies = [
313 | "indenter",
314 | "once_cell",
315 | ]
316 |
317 | [[package]]
318 | name = "fnv"
319 | version = "1.0.7"
320 | source = "registry+https://github.com/rust-lang/crates.io-index"
321 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
322 |
323 | [[package]]
324 | name = "form_urlencoded"
325 | version = "1.2.0"
326 | source = "registry+https://github.com/rust-lang/crates.io-index"
327 | checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
328 | dependencies = [
329 | "percent-encoding",
330 | ]
331 |
332 | [[package]]
333 | name = "futures"
334 | version = "0.3.28"
335 | source = "registry+https://github.com/rust-lang/crates.io-index"
336 | checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
337 | dependencies = [
338 | "futures-channel",
339 | "futures-core",
340 | "futures-executor",
341 | "futures-io",
342 | "futures-sink",
343 | "futures-task",
344 | "futures-util",
345 | ]
346 |
347 | [[package]]
348 | name = "futures-channel"
349 | version = "0.3.28"
350 | source = "registry+https://github.com/rust-lang/crates.io-index"
351 | checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
352 | dependencies = [
353 | "futures-core",
354 | "futures-sink",
355 | ]
356 |
357 | [[package]]
358 | name = "futures-core"
359 | version = "0.3.28"
360 | source = "registry+https://github.com/rust-lang/crates.io-index"
361 | checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
362 |
363 | [[package]]
364 | name = "futures-executor"
365 | version = "0.3.28"
366 | source = "registry+https://github.com/rust-lang/crates.io-index"
367 | checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
368 | dependencies = [
369 | "futures-core",
370 | "futures-task",
371 | "futures-util",
372 | ]
373 |
374 | [[package]]
375 | name = "futures-io"
376 | version = "0.3.28"
377 | source = "registry+https://github.com/rust-lang/crates.io-index"
378 | checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
379 |
380 | [[package]]
381 | name = "futures-macro"
382 | version = "0.3.28"
383 | source = "registry+https://github.com/rust-lang/crates.io-index"
384 | checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
385 | dependencies = [
386 | "proc-macro2",
387 | "quote",
388 | "syn 2.0.18",
389 | ]
390 |
391 | [[package]]
392 | name = "futures-sink"
393 | version = "0.3.28"
394 | source = "registry+https://github.com/rust-lang/crates.io-index"
395 | checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
396 |
397 | [[package]]
398 | name = "futures-task"
399 | version = "0.3.28"
400 | source = "registry+https://github.com/rust-lang/crates.io-index"
401 | checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
402 |
403 | [[package]]
404 | name = "futures-util"
405 | version = "0.3.28"
406 | source = "registry+https://github.com/rust-lang/crates.io-index"
407 | checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
408 | dependencies = [
409 | "futures-channel",
410 | "futures-core",
411 | "futures-io",
412 | "futures-macro",
413 | "futures-sink",
414 | "futures-task",
415 | "memchr",
416 | "pin-project-lite",
417 | "pin-utils",
418 | "slab",
419 | ]
420 |
421 | [[package]]
422 | name = "gimli"
423 | version = "0.27.2"
424 | source = "registry+https://github.com/rust-lang/crates.io-index"
425 | checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
426 |
427 | [[package]]
428 | name = "gittool"
429 | version = "0.1.0"
430 | dependencies = [
431 | "color-eyre",
432 | "cynic",
433 | "cynic-codegen",
434 | "eyre",
435 | "octocrab",
436 | "serde_json",
437 | "tokio",
438 | "tracing",
439 | "tracing-subscriber",
440 | ]
441 |
442 | [[package]]
443 | name = "graphql-parser"
444 | version = "0.4.0"
445 | source = "registry+https://github.com/rust-lang/crates.io-index"
446 | checksum = "d2ebc8013b4426d5b81a4364c419a95ed0b404af2b82e2457de52d9348f0e474"
447 | dependencies = [
448 | "combine",
449 | "thiserror",
450 | ]
451 |
452 | [[package]]
453 | name = "heck"
454 | version = "0.4.1"
455 | source = "registry+https://github.com/rust-lang/crates.io-index"
456 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
457 |
458 | [[package]]
459 | name = "hermit-abi"
460 | version = "0.2.6"
461 | source = "registry+https://github.com/rust-lang/crates.io-index"
462 | checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
463 | dependencies = [
464 | "libc",
465 | ]
466 |
467 | [[package]]
468 | name = "http"
469 | version = "0.2.9"
470 | source = "registry+https://github.com/rust-lang/crates.io-index"
471 | checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
472 | dependencies = [
473 | "bytes",
474 | "fnv",
475 | "itoa",
476 | ]
477 |
478 | [[package]]
479 | name = "http-body"
480 | version = "0.4.5"
481 | source = "registry+https://github.com/rust-lang/crates.io-index"
482 | checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
483 | dependencies = [
484 | "bytes",
485 | "http",
486 | "pin-project-lite",
487 | ]
488 |
489 | [[package]]
490 | name = "http-range-header"
491 | version = "0.3.0"
492 | source = "registry+https://github.com/rust-lang/crates.io-index"
493 | checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29"
494 |
495 | [[package]]
496 | name = "httparse"
497 | version = "1.8.0"
498 | source = "registry+https://github.com/rust-lang/crates.io-index"
499 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
500 |
501 | [[package]]
502 | name = "httpdate"
503 | version = "1.0.2"
504 | source = "registry+https://github.com/rust-lang/crates.io-index"
505 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
506 |
507 | [[package]]
508 | name = "hyper"
509 | version = "0.14.26"
510 | source = "registry+https://github.com/rust-lang/crates.io-index"
511 | checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
512 | dependencies = [
513 | "bytes",
514 | "futures-channel",
515 | "futures-core",
516 | "futures-util",
517 | "http",
518 | "http-body",
519 | "httparse",
520 | "httpdate",
521 | "itoa",
522 | "pin-project-lite",
523 | "socket2",
524 | "tokio",
525 | "tower-service",
526 | "tracing",
527 | "want",
528 | ]
529 |
530 | [[package]]
531 | name = "hyper-rustls"
532 | version = "0.24.0"
533 | source = "registry+https://github.com/rust-lang/crates.io-index"
534 | checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7"
535 | dependencies = [
536 | "http",
537 | "hyper",
538 | "log",
539 | "rustls",
540 | "rustls-native-certs",
541 | "tokio",
542 | "tokio-rustls",
543 | ]
544 |
545 | [[package]]
546 | name = "hyper-timeout"
547 | version = "0.4.1"
548 | source = "registry+https://github.com/rust-lang/crates.io-index"
549 | checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
550 | dependencies = [
551 | "hyper",
552 | "pin-project-lite",
553 | "tokio",
554 | "tokio-io-timeout",
555 | ]
556 |
557 | [[package]]
558 | name = "iana-time-zone"
559 | version = "0.1.57"
560 | source = "registry+https://github.com/rust-lang/crates.io-index"
561 | checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
562 | dependencies = [
563 | "android_system_properties",
564 | "core-foundation-sys",
565 | "iana-time-zone-haiku",
566 | "js-sys",
567 | "wasm-bindgen",
568 | "windows",
569 | ]
570 |
571 | [[package]]
572 | name = "iana-time-zone-haiku"
573 | version = "0.1.2"
574 | source = "registry+https://github.com/rust-lang/crates.io-index"
575 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
576 | dependencies = [
577 | "cc",
578 | ]
579 |
580 | [[package]]
581 | name = "ident_case"
582 | version = "1.0.1"
583 | source = "registry+https://github.com/rust-lang/crates.io-index"
584 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
585 |
586 | [[package]]
587 | name = "idna"
588 | version = "0.4.0"
589 | source = "registry+https://github.com/rust-lang/crates.io-index"
590 | checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
591 | dependencies = [
592 | "unicode-bidi",
593 | "unicode-normalization",
594 | ]
595 |
596 | [[package]]
597 | name = "indenter"
598 | version = "0.3.3"
599 | source = "registry+https://github.com/rust-lang/crates.io-index"
600 | checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
601 |
602 | [[package]]
603 | name = "itoa"
604 | version = "1.0.6"
605 | source = "registry+https://github.com/rust-lang/crates.io-index"
606 | checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
607 |
608 | [[package]]
609 | name = "js-sys"
610 | version = "0.3.63"
611 | source = "registry+https://github.com/rust-lang/crates.io-index"
612 | checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790"
613 | dependencies = [
614 | "wasm-bindgen",
615 | ]
616 |
617 | [[package]]
618 | name = "jsonwebtoken"
619 | version = "8.3.0"
620 | source = "registry+https://github.com/rust-lang/crates.io-index"
621 | checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378"
622 | dependencies = [
623 | "base64 0.21.2",
624 | "pem",
625 | "ring",
626 | "serde",
627 | "serde_json",
628 | "simple_asn1",
629 | ]
630 |
631 | [[package]]
632 | name = "lazy_static"
633 | version = "1.4.0"
634 | source = "registry+https://github.com/rust-lang/crates.io-index"
635 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
636 |
637 | [[package]]
638 | name = "libc"
639 | version = "0.2.146"
640 | source = "registry+https://github.com/rust-lang/crates.io-index"
641 | checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
642 |
643 | [[package]]
644 | name = "log"
645 | version = "0.4.18"
646 | source = "registry+https://github.com/rust-lang/crates.io-index"
647 | checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de"
648 |
649 | [[package]]
650 | name = "matchers"
651 | version = "0.1.0"
652 | source = "registry+https://github.com/rust-lang/crates.io-index"
653 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
654 | dependencies = [
655 | "regex-automata",
656 | ]
657 |
658 | [[package]]
659 | name = "memchr"
660 | version = "2.5.0"
661 | source = "registry+https://github.com/rust-lang/crates.io-index"
662 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
663 |
664 | [[package]]
665 | name = "miniz_oxide"
666 | version = "0.6.2"
667 | source = "registry+https://github.com/rust-lang/crates.io-index"
668 | checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
669 | dependencies = [
670 | "adler",
671 | ]
672 |
673 | [[package]]
674 | name = "mio"
675 | version = "0.8.8"
676 | source = "registry+https://github.com/rust-lang/crates.io-index"
677 | checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
678 | dependencies = [
679 | "libc",
680 | "wasi",
681 | "windows-sys 0.48.0",
682 | ]
683 |
684 | [[package]]
685 | name = "nu-ansi-term"
686 | version = "0.46.0"
687 | source = "registry+https://github.com/rust-lang/crates.io-index"
688 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
689 | dependencies = [
690 | "overload",
691 | "winapi",
692 | ]
693 |
694 | [[package]]
695 | name = "num-bigint"
696 | version = "0.4.3"
697 | source = "registry+https://github.com/rust-lang/crates.io-index"
698 | checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
699 | dependencies = [
700 | "autocfg",
701 | "num-integer",
702 | "num-traits",
703 | ]
704 |
705 | [[package]]
706 | name = "num-integer"
707 | version = "0.1.45"
708 | source = "registry+https://github.com/rust-lang/crates.io-index"
709 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
710 | dependencies = [
711 | "autocfg",
712 | "num-traits",
713 | ]
714 |
715 | [[package]]
716 | name = "num-traits"
717 | version = "0.2.15"
718 | source = "registry+https://github.com/rust-lang/crates.io-index"
719 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
720 | dependencies = [
721 | "autocfg",
722 | ]
723 |
724 | [[package]]
725 | name = "num_cpus"
726 | version = "1.15.0"
727 | source = "registry+https://github.com/rust-lang/crates.io-index"
728 | checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
729 | dependencies = [
730 | "hermit-abi",
731 | "libc",
732 | ]
733 |
734 | [[package]]
735 | name = "object"
736 | version = "0.30.4"
737 | source = "registry+https://github.com/rust-lang/crates.io-index"
738 | checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385"
739 | dependencies = [
740 | "memchr",
741 | ]
742 |
743 | [[package]]
744 | name = "octocrab"
745 | version = "0.25.1"
746 | source = "registry+https://github.com/rust-lang/crates.io-index"
747 | checksum = "a0bc095e456c43e3afe5a53cdcf11aae1965663b941f7a5efb49b6ef53ce8529"
748 | dependencies = [
749 | "arc-swap",
750 | "async-trait",
751 | "base64 0.21.2",
752 | "bytes",
753 | "cfg-if",
754 | "chrono",
755 | "either",
756 | "futures",
757 | "futures-util",
758 | "http",
759 | "http-body",
760 | "hyper",
761 | "hyper-rustls",
762 | "hyper-timeout",
763 | "jsonwebtoken",
764 | "once_cell",
765 | "percent-encoding",
766 | "pin-project",
767 | "secrecy",
768 | "serde",
769 | "serde_json",
770 | "serde_path_to_error",
771 | "serde_urlencoded",
772 | "snafu",
773 | "tokio",
774 | "tower",
775 | "tower-http",
776 | "tracing",
777 | "url",
778 | ]
779 |
780 | [[package]]
781 | name = "once_cell"
782 | version = "1.18.0"
783 | source = "registry+https://github.com/rust-lang/crates.io-index"
784 | checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
785 |
786 | [[package]]
787 | name = "openssl-probe"
788 | version = "0.1.5"
789 | source = "registry+https://github.com/rust-lang/crates.io-index"
790 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
791 |
792 | [[package]]
793 | name = "ouroboros"
794 | version = "0.15.6"
795 | source = "registry+https://github.com/rust-lang/crates.io-index"
796 | checksum = "e1358bd1558bd2a083fed428ffeda486fbfb323e698cdda7794259d592ca72db"
797 | dependencies = [
798 | "aliasable",
799 | "ouroboros_macro",
800 | ]
801 |
802 | [[package]]
803 | name = "ouroboros_macro"
804 | version = "0.15.6"
805 | source = "registry+https://github.com/rust-lang/crates.io-index"
806 | checksum = "5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7"
807 | dependencies = [
808 | "Inflector",
809 | "proc-macro-error",
810 | "proc-macro2",
811 | "quote",
812 | "syn 1.0.109",
813 | ]
814 |
815 | [[package]]
816 | name = "overload"
817 | version = "0.1.1"
818 | source = "registry+https://github.com/rust-lang/crates.io-index"
819 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
820 |
821 | [[package]]
822 | name = "owo-colors"
823 | version = "3.5.0"
824 | source = "registry+https://github.com/rust-lang/crates.io-index"
825 | checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
826 |
827 | [[package]]
828 | name = "pem"
829 | version = "1.1.1"
830 | source = "registry+https://github.com/rust-lang/crates.io-index"
831 | checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
832 | dependencies = [
833 | "base64 0.13.1",
834 | ]
835 |
836 | [[package]]
837 | name = "percent-encoding"
838 | version = "2.3.0"
839 | source = "registry+https://github.com/rust-lang/crates.io-index"
840 | checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
841 |
842 | [[package]]
843 | name = "pin-project"
844 | version = "1.1.0"
845 | source = "registry+https://github.com/rust-lang/crates.io-index"
846 | checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead"
847 | dependencies = [
848 | "pin-project-internal",
849 | ]
850 |
851 | [[package]]
852 | name = "pin-project-internal"
853 | version = "1.1.0"
854 | source = "registry+https://github.com/rust-lang/crates.io-index"
855 | checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07"
856 | dependencies = [
857 | "proc-macro2",
858 | "quote",
859 | "syn 2.0.18",
860 | ]
861 |
862 | [[package]]
863 | name = "pin-project-lite"
864 | version = "0.2.9"
865 | source = "registry+https://github.com/rust-lang/crates.io-index"
866 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
867 |
868 | [[package]]
869 | name = "pin-utils"
870 | version = "0.1.0"
871 | source = "registry+https://github.com/rust-lang/crates.io-index"
872 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
873 |
874 | [[package]]
875 | name = "proc-macro-error"
876 | version = "1.0.4"
877 | source = "registry+https://github.com/rust-lang/crates.io-index"
878 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
879 | dependencies = [
880 | "proc-macro-error-attr",
881 | "proc-macro2",
882 | "quote",
883 | "syn 1.0.109",
884 | "version_check",
885 | ]
886 |
887 | [[package]]
888 | name = "proc-macro-error-attr"
889 | version = "1.0.4"
890 | source = "registry+https://github.com/rust-lang/crates.io-index"
891 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
892 | dependencies = [
893 | "proc-macro2",
894 | "quote",
895 | "version_check",
896 | ]
897 |
898 | [[package]]
899 | name = "proc-macro2"
900 | version = "1.0.60"
901 | source = "registry+https://github.com/rust-lang/crates.io-index"
902 | checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406"
903 | dependencies = [
904 | "unicode-ident",
905 | ]
906 |
907 | [[package]]
908 | name = "quote"
909 | version = "1.0.28"
910 | source = "registry+https://github.com/rust-lang/crates.io-index"
911 | checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
912 | dependencies = [
913 | "proc-macro2",
914 | ]
915 |
916 | [[package]]
917 | name = "ref-cast"
918 | version = "1.0.16"
919 | source = "registry+https://github.com/rust-lang/crates.io-index"
920 | checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c"
921 | dependencies = [
922 | "ref-cast-impl",
923 | ]
924 |
925 | [[package]]
926 | name = "ref-cast-impl"
927 | version = "1.0.16"
928 | source = "registry+https://github.com/rust-lang/crates.io-index"
929 | checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7"
930 | dependencies = [
931 | "proc-macro2",
932 | "quote",
933 | "syn 2.0.18",
934 | ]
935 |
936 | [[package]]
937 | name = "regex"
938 | version = "1.8.4"
939 | source = "registry+https://github.com/rust-lang/crates.io-index"
940 | checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f"
941 | dependencies = [
942 | "regex-syntax 0.7.2",
943 | ]
944 |
945 | [[package]]
946 | name = "regex-automata"
947 | version = "0.1.10"
948 | source = "registry+https://github.com/rust-lang/crates.io-index"
949 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
950 | dependencies = [
951 | "regex-syntax 0.6.29",
952 | ]
953 |
954 | [[package]]
955 | name = "regex-syntax"
956 | version = "0.6.29"
957 | source = "registry+https://github.com/rust-lang/crates.io-index"
958 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
959 |
960 | [[package]]
961 | name = "regex-syntax"
962 | version = "0.7.2"
963 | source = "registry+https://github.com/rust-lang/crates.io-index"
964 | checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
965 |
966 | [[package]]
967 | name = "ring"
968 | version = "0.16.20"
969 | source = "registry+https://github.com/rust-lang/crates.io-index"
970 | checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
971 | dependencies = [
972 | "cc",
973 | "libc",
974 | "once_cell",
975 | "spin",
976 | "untrusted",
977 | "web-sys",
978 | "winapi",
979 | ]
980 |
981 | [[package]]
982 | name = "rustc-demangle"
983 | version = "0.1.23"
984 | source = "registry+https://github.com/rust-lang/crates.io-index"
985 | checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
986 |
987 | [[package]]
988 | name = "rustls"
989 | version = "0.21.1"
990 | source = "registry+https://github.com/rust-lang/crates.io-index"
991 | checksum = "c911ba11bc8433e811ce56fde130ccf32f5127cab0e0194e9c68c5a5b671791e"
992 | dependencies = [
993 | "log",
994 | "ring",
995 | "rustls-webpki",
996 | "sct",
997 | ]
998 |
999 | [[package]]
1000 | name = "rustls-native-certs"
1001 | version = "0.6.2"
1002 | source = "registry+https://github.com/rust-lang/crates.io-index"
1003 | checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50"
1004 | dependencies = [
1005 | "openssl-probe",
1006 | "rustls-pemfile",
1007 | "schannel",
1008 | "security-framework",
1009 | ]
1010 |
1011 | [[package]]
1012 | name = "rustls-pemfile"
1013 | version = "1.0.2"
1014 | source = "registry+https://github.com/rust-lang/crates.io-index"
1015 | checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
1016 | dependencies = [
1017 | "base64 0.21.2",
1018 | ]
1019 |
1020 | [[package]]
1021 | name = "rustls-webpki"
1022 | version = "0.100.1"
1023 | source = "registry+https://github.com/rust-lang/crates.io-index"
1024 | checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
1025 | dependencies = [
1026 | "ring",
1027 | "untrusted",
1028 | ]
1029 |
1030 | [[package]]
1031 | name = "ryu"
1032 | version = "1.0.13"
1033 | source = "registry+https://github.com/rust-lang/crates.io-index"
1034 | checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
1035 |
1036 | [[package]]
1037 | name = "schannel"
1038 | version = "0.1.21"
1039 | source = "registry+https://github.com/rust-lang/crates.io-index"
1040 | checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
1041 | dependencies = [
1042 | "windows-sys 0.42.0",
1043 | ]
1044 |
1045 | [[package]]
1046 | name = "sct"
1047 | version = "0.7.0"
1048 | source = "registry+https://github.com/rust-lang/crates.io-index"
1049 | checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
1050 | dependencies = [
1051 | "ring",
1052 | "untrusted",
1053 | ]
1054 |
1055 | [[package]]
1056 | name = "secrecy"
1057 | version = "0.8.0"
1058 | source = "registry+https://github.com/rust-lang/crates.io-index"
1059 | checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e"
1060 | dependencies = [
1061 | "zeroize",
1062 | ]
1063 |
1064 | [[package]]
1065 | name = "security-framework"
1066 | version = "2.9.1"
1067 | source = "registry+https://github.com/rust-lang/crates.io-index"
1068 | checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8"
1069 | dependencies = [
1070 | "bitflags",
1071 | "core-foundation",
1072 | "core-foundation-sys",
1073 | "libc",
1074 | "security-framework-sys",
1075 | ]
1076 |
1077 | [[package]]
1078 | name = "security-framework-sys"
1079 | version = "2.9.0"
1080 | source = "registry+https://github.com/rust-lang/crates.io-index"
1081 | checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
1082 | dependencies = [
1083 | "core-foundation-sys",
1084 | "libc",
1085 | ]
1086 |
1087 | [[package]]
1088 | name = "serde"
1089 | version = "1.0.164"
1090 | source = "registry+https://github.com/rust-lang/crates.io-index"
1091 | checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
1092 | dependencies = [
1093 | "serde_derive",
1094 | ]
1095 |
1096 | [[package]]
1097 | name = "serde_derive"
1098 | version = "1.0.164"
1099 | source = "registry+https://github.com/rust-lang/crates.io-index"
1100 | checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
1101 | dependencies = [
1102 | "proc-macro2",
1103 | "quote",
1104 | "syn 2.0.18",
1105 | ]
1106 |
1107 | [[package]]
1108 | name = "serde_json"
1109 | version = "1.0.96"
1110 | source = "registry+https://github.com/rust-lang/crates.io-index"
1111 | checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
1112 | dependencies = [
1113 | "itoa",
1114 | "ryu",
1115 | "serde",
1116 | ]
1117 |
1118 | [[package]]
1119 | name = "serde_path_to_error"
1120 | version = "0.1.11"
1121 | source = "registry+https://github.com/rust-lang/crates.io-index"
1122 | checksum = "f7f05c1d5476066defcdfacce1f52fc3cae3af1d3089727100c02ae92e5abbe0"
1123 | dependencies = [
1124 | "serde",
1125 | ]
1126 |
1127 | [[package]]
1128 | name = "serde_urlencoded"
1129 | version = "0.7.1"
1130 | source = "registry+https://github.com/rust-lang/crates.io-index"
1131 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
1132 | dependencies = [
1133 | "form_urlencoded",
1134 | "itoa",
1135 | "ryu",
1136 | "serde",
1137 | ]
1138 |
1139 | [[package]]
1140 | name = "sharded-slab"
1141 | version = "0.1.4"
1142 | source = "registry+https://github.com/rust-lang/crates.io-index"
1143 | checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
1144 | dependencies = [
1145 | "lazy_static",
1146 | ]
1147 |
1148 | [[package]]
1149 | name = "signal-hook-registry"
1150 | version = "1.4.1"
1151 | source = "registry+https://github.com/rust-lang/crates.io-index"
1152 | checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
1153 | dependencies = [
1154 | "libc",
1155 | ]
1156 |
1157 | [[package]]
1158 | name = "simple_asn1"
1159 | version = "0.6.2"
1160 | source = "registry+https://github.com/rust-lang/crates.io-index"
1161 | checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085"
1162 | dependencies = [
1163 | "num-bigint",
1164 | "num-traits",
1165 | "thiserror",
1166 | "time",
1167 | ]
1168 |
1169 | [[package]]
1170 | name = "slab"
1171 | version = "0.4.8"
1172 | source = "registry+https://github.com/rust-lang/crates.io-index"
1173 | checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
1174 | dependencies = [
1175 | "autocfg",
1176 | ]
1177 |
1178 | [[package]]
1179 | name = "snafu"
1180 | version = "0.7.4"
1181 | source = "registry+https://github.com/rust-lang/crates.io-index"
1182 | checksum = "cb0656e7e3ffb70f6c39b3c2a86332bb74aa3c679da781642590f3c1118c5045"
1183 | dependencies = [
1184 | "backtrace",
1185 | "doc-comment",
1186 | "snafu-derive",
1187 | ]
1188 |
1189 | [[package]]
1190 | name = "snafu-derive"
1191 | version = "0.7.4"
1192 | source = "registry+https://github.com/rust-lang/crates.io-index"
1193 | checksum = "475b3bbe5245c26f2d8a6f62d67c1f30eb9fffeccee721c45d162c3ebbdf81b2"
1194 | dependencies = [
1195 | "heck",
1196 | "proc-macro2",
1197 | "quote",
1198 | "syn 1.0.109",
1199 | ]
1200 |
1201 | [[package]]
1202 | name = "socket2"
1203 | version = "0.4.9"
1204 | source = "registry+https://github.com/rust-lang/crates.io-index"
1205 | checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
1206 | dependencies = [
1207 | "libc",
1208 | "winapi",
1209 | ]
1210 |
1211 | [[package]]
1212 | name = "spin"
1213 | version = "0.5.2"
1214 | source = "registry+https://github.com/rust-lang/crates.io-index"
1215 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
1216 |
1217 | [[package]]
1218 | name = "static_assertions"
1219 | version = "1.1.0"
1220 | source = "registry+https://github.com/rust-lang/crates.io-index"
1221 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
1222 |
1223 | [[package]]
1224 | name = "strsim"
1225 | version = "0.10.0"
1226 | source = "registry+https://github.com/rust-lang/crates.io-index"
1227 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
1228 |
1229 | [[package]]
1230 | name = "syn"
1231 | version = "1.0.109"
1232 | source = "registry+https://github.com/rust-lang/crates.io-index"
1233 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
1234 | dependencies = [
1235 | "proc-macro2",
1236 | "quote",
1237 | "unicode-ident",
1238 | ]
1239 |
1240 | [[package]]
1241 | name = "syn"
1242 | version = "2.0.18"
1243 | source = "registry+https://github.com/rust-lang/crates.io-index"
1244 | checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
1245 | dependencies = [
1246 | "proc-macro2",
1247 | "quote",
1248 | "unicode-ident",
1249 | ]
1250 |
1251 | [[package]]
1252 | name = "thiserror"
1253 | version = "1.0.40"
1254 | source = "registry+https://github.com/rust-lang/crates.io-index"
1255 | checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
1256 | dependencies = [
1257 | "thiserror-impl",
1258 | ]
1259 |
1260 | [[package]]
1261 | name = "thiserror-impl"
1262 | version = "1.0.40"
1263 | source = "registry+https://github.com/rust-lang/crates.io-index"
1264 | checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
1265 | dependencies = [
1266 | "proc-macro2",
1267 | "quote",
1268 | "syn 2.0.18",
1269 | ]
1270 |
1271 | [[package]]
1272 | name = "thread_local"
1273 | version = "1.1.7"
1274 | source = "registry+https://github.com/rust-lang/crates.io-index"
1275 | checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
1276 | dependencies = [
1277 | "cfg-if",
1278 | "once_cell",
1279 | ]
1280 |
1281 | [[package]]
1282 | name = "time"
1283 | version = "0.3.22"
1284 | source = "registry+https://github.com/rust-lang/crates.io-index"
1285 | checksum = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd"
1286 | dependencies = [
1287 | "itoa",
1288 | "serde",
1289 | "time-core",
1290 | "time-macros",
1291 | ]
1292 |
1293 | [[package]]
1294 | name = "time-core"
1295 | version = "0.1.1"
1296 | source = "registry+https://github.com/rust-lang/crates.io-index"
1297 | checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
1298 |
1299 | [[package]]
1300 | name = "time-macros"
1301 | version = "0.2.9"
1302 | source = "registry+https://github.com/rust-lang/crates.io-index"
1303 | checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b"
1304 | dependencies = [
1305 | "time-core",
1306 | ]
1307 |
1308 | [[package]]
1309 | name = "tinyvec"
1310 | version = "1.6.0"
1311 | source = "registry+https://github.com/rust-lang/crates.io-index"
1312 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
1313 | dependencies = [
1314 | "tinyvec_macros",
1315 | ]
1316 |
1317 | [[package]]
1318 | name = "tinyvec_macros"
1319 | version = "0.1.1"
1320 | source = "registry+https://github.com/rust-lang/crates.io-index"
1321 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
1322 |
1323 | [[package]]
1324 | name = "tokio"
1325 | version = "1.28.2"
1326 | source = "registry+https://github.com/rust-lang/crates.io-index"
1327 | checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2"
1328 | dependencies = [
1329 | "autocfg",
1330 | "bytes",
1331 | "libc",
1332 | "mio",
1333 | "num_cpus",
1334 | "pin-project-lite",
1335 | "signal-hook-registry",
1336 | "socket2",
1337 | "tokio-macros",
1338 | "windows-sys 0.48.0",
1339 | ]
1340 |
1341 | [[package]]
1342 | name = "tokio-io-timeout"
1343 | version = "1.2.0"
1344 | source = "registry+https://github.com/rust-lang/crates.io-index"
1345 | checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
1346 | dependencies = [
1347 | "pin-project-lite",
1348 | "tokio",
1349 | ]
1350 |
1351 | [[package]]
1352 | name = "tokio-macros"
1353 | version = "2.1.0"
1354 | source = "registry+https://github.com/rust-lang/crates.io-index"
1355 | checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
1356 | dependencies = [
1357 | "proc-macro2",
1358 | "quote",
1359 | "syn 2.0.18",
1360 | ]
1361 |
1362 | [[package]]
1363 | name = "tokio-rustls"
1364 | version = "0.24.1"
1365 | source = "registry+https://github.com/rust-lang/crates.io-index"
1366 | checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
1367 | dependencies = [
1368 | "rustls",
1369 | "tokio",
1370 | ]
1371 |
1372 | [[package]]
1373 | name = "tokio-util"
1374 | version = "0.7.8"
1375 | source = "registry+https://github.com/rust-lang/crates.io-index"
1376 | checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
1377 | dependencies = [
1378 | "bytes",
1379 | "futures-core",
1380 | "futures-sink",
1381 | "pin-project-lite",
1382 | "tokio",
1383 | ]
1384 |
1385 | [[package]]
1386 | name = "tower"
1387 | version = "0.4.13"
1388 | source = "registry+https://github.com/rust-lang/crates.io-index"
1389 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
1390 | dependencies = [
1391 | "futures-core",
1392 | "futures-util",
1393 | "pin-project",
1394 | "pin-project-lite",
1395 | "tokio",
1396 | "tokio-util",
1397 | "tower-layer",
1398 | "tower-service",
1399 | "tracing",
1400 | ]
1401 |
1402 | [[package]]
1403 | name = "tower-http"
1404 | version = "0.4.0"
1405 | source = "registry+https://github.com/rust-lang/crates.io-index"
1406 | checksum = "5d1d42a9b3f3ec46ba828e8d376aec14592ea199f70a06a548587ecd1c4ab658"
1407 | dependencies = [
1408 | "bitflags",
1409 | "bytes",
1410 | "futures-core",
1411 | "futures-util",
1412 | "http",
1413 | "http-body",
1414 | "http-range-header",
1415 | "pin-project-lite",
1416 | "tower-layer",
1417 | "tower-service",
1418 | "tracing",
1419 | ]
1420 |
1421 | [[package]]
1422 | name = "tower-layer"
1423 | version = "0.3.2"
1424 | source = "registry+https://github.com/rust-lang/crates.io-index"
1425 | checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
1426 |
1427 | [[package]]
1428 | name = "tower-service"
1429 | version = "0.3.2"
1430 | source = "registry+https://github.com/rust-lang/crates.io-index"
1431 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
1432 |
1433 | [[package]]
1434 | name = "tracing"
1435 | version = "0.1.37"
1436 | source = "registry+https://github.com/rust-lang/crates.io-index"
1437 | checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
1438 | dependencies = [
1439 | "cfg-if",
1440 | "log",
1441 | "pin-project-lite",
1442 | "tracing-attributes",
1443 | "tracing-core",
1444 | ]
1445 |
1446 | [[package]]
1447 | name = "tracing-attributes"
1448 | version = "0.1.24"
1449 | source = "registry+https://github.com/rust-lang/crates.io-index"
1450 | checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
1451 | dependencies = [
1452 | "proc-macro2",
1453 | "quote",
1454 | "syn 2.0.18",
1455 | ]
1456 |
1457 | [[package]]
1458 | name = "tracing-core"
1459 | version = "0.1.31"
1460 | source = "registry+https://github.com/rust-lang/crates.io-index"
1461 | checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
1462 | dependencies = [
1463 | "once_cell",
1464 | "valuable",
1465 | ]
1466 |
1467 | [[package]]
1468 | name = "tracing-error"
1469 | version = "0.2.0"
1470 | source = "registry+https://github.com/rust-lang/crates.io-index"
1471 | checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e"
1472 | dependencies = [
1473 | "tracing",
1474 | "tracing-subscriber",
1475 | ]
1476 |
1477 | [[package]]
1478 | name = "tracing-subscriber"
1479 | version = "0.3.17"
1480 | source = "registry+https://github.com/rust-lang/crates.io-index"
1481 | checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
1482 | dependencies = [
1483 | "matchers",
1484 | "nu-ansi-term",
1485 | "once_cell",
1486 | "regex",
1487 | "sharded-slab",
1488 | "thread_local",
1489 | "tracing",
1490 | "tracing-core",
1491 | ]
1492 |
1493 | [[package]]
1494 | name = "try-lock"
1495 | version = "0.2.4"
1496 | source = "registry+https://github.com/rust-lang/crates.io-index"
1497 | checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
1498 |
1499 | [[package]]
1500 | name = "unicode-bidi"
1501 | version = "0.3.13"
1502 | source = "registry+https://github.com/rust-lang/crates.io-index"
1503 | checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
1504 |
1505 | [[package]]
1506 | name = "unicode-ident"
1507 | version = "1.0.9"
1508 | source = "registry+https://github.com/rust-lang/crates.io-index"
1509 | checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
1510 |
1511 | [[package]]
1512 | name = "unicode-normalization"
1513 | version = "0.1.22"
1514 | source = "registry+https://github.com/rust-lang/crates.io-index"
1515 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
1516 | dependencies = [
1517 | "tinyvec",
1518 | ]
1519 |
1520 | [[package]]
1521 | name = "unreachable"
1522 | version = "1.0.0"
1523 | source = "registry+https://github.com/rust-lang/crates.io-index"
1524 | checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"
1525 | dependencies = [
1526 | "void",
1527 | ]
1528 |
1529 | [[package]]
1530 | name = "untrusted"
1531 | version = "0.7.1"
1532 | source = "registry+https://github.com/rust-lang/crates.io-index"
1533 | checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
1534 |
1535 | [[package]]
1536 | name = "url"
1537 | version = "2.4.0"
1538 | source = "registry+https://github.com/rust-lang/crates.io-index"
1539 | checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
1540 | dependencies = [
1541 | "form_urlencoded",
1542 | "idna",
1543 | "percent-encoding",
1544 | "serde",
1545 | ]
1546 |
1547 | [[package]]
1548 | name = "valuable"
1549 | version = "0.1.0"
1550 | source = "registry+https://github.com/rust-lang/crates.io-index"
1551 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
1552 |
1553 | [[package]]
1554 | name = "version_check"
1555 | version = "0.9.4"
1556 | source = "registry+https://github.com/rust-lang/crates.io-index"
1557 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
1558 |
1559 | [[package]]
1560 | name = "void"
1561 | version = "1.0.2"
1562 | source = "registry+https://github.com/rust-lang/crates.io-index"
1563 | checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
1564 |
1565 | [[package]]
1566 | name = "want"
1567 | version = "0.3.0"
1568 | source = "registry+https://github.com/rust-lang/crates.io-index"
1569 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
1570 | dependencies = [
1571 | "log",
1572 | "try-lock",
1573 | ]
1574 |
1575 | [[package]]
1576 | name = "wasi"
1577 | version = "0.11.0+wasi-snapshot-preview1"
1578 | source = "registry+https://github.com/rust-lang/crates.io-index"
1579 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
1580 |
1581 | [[package]]
1582 | name = "wasm-bindgen"
1583 | version = "0.2.86"
1584 | source = "registry+https://github.com/rust-lang/crates.io-index"
1585 | checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73"
1586 | dependencies = [
1587 | "cfg-if",
1588 | "wasm-bindgen-macro",
1589 | ]
1590 |
1591 | [[package]]
1592 | name = "wasm-bindgen-backend"
1593 | version = "0.2.86"
1594 | source = "registry+https://github.com/rust-lang/crates.io-index"
1595 | checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb"
1596 | dependencies = [
1597 | "bumpalo",
1598 | "log",
1599 | "once_cell",
1600 | "proc-macro2",
1601 | "quote",
1602 | "syn 2.0.18",
1603 | "wasm-bindgen-shared",
1604 | ]
1605 |
1606 | [[package]]
1607 | name = "wasm-bindgen-macro"
1608 | version = "0.2.86"
1609 | source = "registry+https://github.com/rust-lang/crates.io-index"
1610 | checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258"
1611 | dependencies = [
1612 | "quote",
1613 | "wasm-bindgen-macro-support",
1614 | ]
1615 |
1616 | [[package]]
1617 | name = "wasm-bindgen-macro-support"
1618 | version = "0.2.86"
1619 | source = "registry+https://github.com/rust-lang/crates.io-index"
1620 | checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8"
1621 | dependencies = [
1622 | "proc-macro2",
1623 | "quote",
1624 | "syn 2.0.18",
1625 | "wasm-bindgen-backend",
1626 | "wasm-bindgen-shared",
1627 | ]
1628 |
1629 | [[package]]
1630 | name = "wasm-bindgen-shared"
1631 | version = "0.2.86"
1632 | source = "registry+https://github.com/rust-lang/crates.io-index"
1633 | checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93"
1634 |
1635 | [[package]]
1636 | name = "web-sys"
1637 | version = "0.3.63"
1638 | source = "registry+https://github.com/rust-lang/crates.io-index"
1639 | checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2"
1640 | dependencies = [
1641 | "js-sys",
1642 | "wasm-bindgen",
1643 | ]
1644 |
1645 | [[package]]
1646 | name = "winapi"
1647 | version = "0.3.9"
1648 | source = "registry+https://github.com/rust-lang/crates.io-index"
1649 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
1650 | dependencies = [
1651 | "winapi-i686-pc-windows-gnu",
1652 | "winapi-x86_64-pc-windows-gnu",
1653 | ]
1654 |
1655 | [[package]]
1656 | name = "winapi-i686-pc-windows-gnu"
1657 | version = "0.4.0"
1658 | source = "registry+https://github.com/rust-lang/crates.io-index"
1659 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
1660 |
1661 | [[package]]
1662 | name = "winapi-x86_64-pc-windows-gnu"
1663 | version = "0.4.0"
1664 | source = "registry+https://github.com/rust-lang/crates.io-index"
1665 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1666 |
1667 | [[package]]
1668 | name = "windows"
1669 | version = "0.48.0"
1670 | source = "registry+https://github.com/rust-lang/crates.io-index"
1671 | checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
1672 | dependencies = [
1673 | "windows-targets",
1674 | ]
1675 |
1676 | [[package]]
1677 | name = "windows-sys"
1678 | version = "0.42.0"
1679 | source = "registry+https://github.com/rust-lang/crates.io-index"
1680 | checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
1681 | dependencies = [
1682 | "windows_aarch64_gnullvm 0.42.2",
1683 | "windows_aarch64_msvc 0.42.2",
1684 | "windows_i686_gnu 0.42.2",
1685 | "windows_i686_msvc 0.42.2",
1686 | "windows_x86_64_gnu 0.42.2",
1687 | "windows_x86_64_gnullvm 0.42.2",
1688 | "windows_x86_64_msvc 0.42.2",
1689 | ]
1690 |
1691 | [[package]]
1692 | name = "windows-sys"
1693 | version = "0.48.0"
1694 | source = "registry+https://github.com/rust-lang/crates.io-index"
1695 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
1696 | dependencies = [
1697 | "windows-targets",
1698 | ]
1699 |
1700 | [[package]]
1701 | name = "windows-targets"
1702 | version = "0.48.0"
1703 | source = "registry+https://github.com/rust-lang/crates.io-index"
1704 | checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
1705 | dependencies = [
1706 | "windows_aarch64_gnullvm 0.48.0",
1707 | "windows_aarch64_msvc 0.48.0",
1708 | "windows_i686_gnu 0.48.0",
1709 | "windows_i686_msvc 0.48.0",
1710 | "windows_x86_64_gnu 0.48.0",
1711 | "windows_x86_64_gnullvm 0.48.0",
1712 | "windows_x86_64_msvc 0.48.0",
1713 | ]
1714 |
1715 | [[package]]
1716 | name = "windows_aarch64_gnullvm"
1717 | version = "0.42.2"
1718 | source = "registry+https://github.com/rust-lang/crates.io-index"
1719 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
1720 |
1721 | [[package]]
1722 | name = "windows_aarch64_gnullvm"
1723 | version = "0.48.0"
1724 | source = "registry+https://github.com/rust-lang/crates.io-index"
1725 | checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
1726 |
1727 | [[package]]
1728 | name = "windows_aarch64_msvc"
1729 | version = "0.42.2"
1730 | source = "registry+https://github.com/rust-lang/crates.io-index"
1731 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
1732 |
1733 | [[package]]
1734 | name = "windows_aarch64_msvc"
1735 | version = "0.48.0"
1736 | source = "registry+https://github.com/rust-lang/crates.io-index"
1737 | checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
1738 |
1739 | [[package]]
1740 | name = "windows_i686_gnu"
1741 | version = "0.42.2"
1742 | source = "registry+https://github.com/rust-lang/crates.io-index"
1743 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
1744 |
1745 | [[package]]
1746 | name = "windows_i686_gnu"
1747 | version = "0.48.0"
1748 | source = "registry+https://github.com/rust-lang/crates.io-index"
1749 | checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
1750 |
1751 | [[package]]
1752 | name = "windows_i686_msvc"
1753 | version = "0.42.2"
1754 | source = "registry+https://github.com/rust-lang/crates.io-index"
1755 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
1756 |
1757 | [[package]]
1758 | name = "windows_i686_msvc"
1759 | version = "0.48.0"
1760 | source = "registry+https://github.com/rust-lang/crates.io-index"
1761 | checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
1762 |
1763 | [[package]]
1764 | name = "windows_x86_64_gnu"
1765 | version = "0.42.2"
1766 | source = "registry+https://github.com/rust-lang/crates.io-index"
1767 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
1768 |
1769 | [[package]]
1770 | name = "windows_x86_64_gnu"
1771 | version = "0.48.0"
1772 | source = "registry+https://github.com/rust-lang/crates.io-index"
1773 | checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
1774 |
1775 | [[package]]
1776 | name = "windows_x86_64_gnullvm"
1777 | version = "0.42.2"
1778 | source = "registry+https://github.com/rust-lang/crates.io-index"
1779 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
1780 |
1781 | [[package]]
1782 | name = "windows_x86_64_gnullvm"
1783 | version = "0.48.0"
1784 | source = "registry+https://github.com/rust-lang/crates.io-index"
1785 | checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
1786 |
1787 | [[package]]
1788 | name = "windows_x86_64_msvc"
1789 | version = "0.42.2"
1790 | source = "registry+https://github.com/rust-lang/crates.io-index"
1791 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
1792 |
1793 | [[package]]
1794 | name = "windows_x86_64_msvc"
1795 | version = "0.48.0"
1796 | source = "registry+https://github.com/rust-lang/crates.io-index"
1797 | checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
1798 |
1799 | [[package]]
1800 | name = "zeroize"
1801 | version = "1.6.0"
1802 | source = "registry+https://github.com/rust-lang/crates.io-index"
1803 | checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
1804 |
--------------------------------------------------------------------------------
/ghtool/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "ghtool"
3 | version = "0.10.6"
4 | edition = "2021"
5 | description = "A command-line tool for interacting with Github API with some specialized features oriented around Checks"
6 | license = "MIT"
7 | repository = "https://github.com/raine/ghtool"
8 | readme = "../README.md"
9 |
10 | [[bin]]
11 | name = "ght"
12 | path = "src/bin/main.rs"
13 |
14 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
15 |
16 | [dependencies]
17 | color-eyre = "0.6.2"
18 | cynic = { version = "3.7.0", features = ["serde_json", "http-reqwest"] }
19 | eyre = "0.6.8"
20 | serde_json = "1.0.105"
21 | tokio = { version = "1.32.0", features = ["macros", "rt-multi-thread"] }
22 | tracing = "0.1.37"
23 | tracing-subscriber = {version = "0.3.17", default-features = false, features = ["env-filter", "fmt", "ansi"]}
24 | cynic-github-schema = { path = "../github_schema", version = "0.1.0" }
25 | serde = "1.0.188"
26 | http = "1.1.0"
27 | toml = "0.8.0"
28 | regex = "1.9.4"
29 | dirs = "5.0.1"
30 | futures = "0.3.28"
31 | strip-ansi-escapes = "0.2.0"
32 | lazy_static = "1.4.0"
33 | clap = { version = "4.4.1", features = ["derive"] }
34 | term_size = "0.3.2"
35 | sled = { version = "0.34.7", features = ["compression"] }
36 | reqwest = { version = "0.12.4", features = ["stream"] }
37 | bytes = "1.4.0"
38 | indicatif = "0.17.6"
39 | open = "5.0.0"
40 | keyring = "2.0.5"
41 | chrono = "0.4.28"
42 | thiserror = "1.0.47"
43 |
44 | [dev-dependencies]
45 | pretty_assertions = "1.4.0"
46 |
47 | [build-dependencies]
48 | cynic-codegen = { version = "3.7.0", features = ["rkyv"] }
49 |
--------------------------------------------------------------------------------
/ghtool/build.rs:
--------------------------------------------------------------------------------
1 | fn main() {
2 | cynic_codegen::register_schema("github")
3 | .from_sdl_file("./github.graphql")
4 | .unwrap()
5 | .as_default()
6 | .unwrap();
7 | }
8 |
--------------------------------------------------------------------------------
/ghtool/github.graphql:
--------------------------------------------------------------------------------
1 | ../github_schema/github.graphql
--------------------------------------------------------------------------------
/ghtool/hurl/github-device-flow:
--------------------------------------------------------------------------------
1 | # https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps#device-flow
2 | POST https://github.com/login/device/code
3 | Content-Type: application/x-www-form-urlencoded
4 | `client_id=32a2525cc736ee9b63ae&scope=repo+read%3Aorg`
5 |
6 | HTTP 200
7 | [Captures]
8 | device_code: regex "device_code=(.*?)&"
9 |
10 | POST https://github.com/login/oauth/access_token
11 | Accept: application/json
12 | Content-Type: application/x-www-form-urlencoded
13 | `client_id=Iv1.1bbd5e03617adebb&device_code={{device_code}}&grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code`
14 |
--------------------------------------------------------------------------------
/ghtool/justfile:
--------------------------------------------------------------------------------
1 | build:
2 | cargo build
3 |
4 | build-release:
5 | cargo build --release
6 |
7 | publish:
8 | cargo publish
9 |
10 | run *FLAGS:
11 | cargo run {{FLAGS}}
12 |
13 | test *FLAGS:
14 | cargo test {{FLAGS}}
15 |
16 | testw *FLAGS:
17 | fd .rs | entr -r cargo test {{FLAGS}}
18 |
19 | install:
20 | cargo install --path .
21 |
--------------------------------------------------------------------------------
/ghtool/src/bin/main.rs:
--------------------------------------------------------------------------------
1 | use clap::Parser;
2 | use commands::{auth, handle_all_command, handle_command, CommandType};
3 | use eyre::Result;
4 | use ghtool::{
5 | cli::{self, Commands},
6 | commands, setup, term,
7 | };
8 | use setup::setup;
9 | use term::exit_with_error;
10 |
11 | async fn run() -> Result<()> {
12 | let cli = setup()?;
13 |
14 | match &cli.command {
15 | Some(Commands::Test { files }) => handle_command(CommandType::Test, &cli, *files).await,
16 | Some(Commands::Lint { files }) => handle_command(CommandType::Lint, &cli, *files).await,
17 | Some(Commands::Build { files }) => handle_command(CommandType::Build, &cli, *files).await,
18 | Some(Commands::All {}) => handle_all_command(&cli).await,
19 | Some(Commands::Login { stdin }) => {
20 | auth::login(*stdin).await?;
21 | Ok(())
22 | }
23 | Some(Commands::Logout {}) => {
24 | auth::logout()?;
25 | Ok(())
26 | }
27 | None => {
28 | // Show help if no command is given. arg_required_else_help clap thing is supposed to
29 | // do this but that doesn't work if some arguments, but no command, are given
30 | cli::Cli::parse_from(["--help"]);
31 | Ok(())
32 | }
33 | }
34 | }
35 |
36 | #[tokio::main]
37 | async fn main() {
38 | if let Err(e) = run().await {
39 | let _ = exit_with_error::(e);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/ghtool/src/cache.rs:
--------------------------------------------------------------------------------
1 | use std::time::SystemTime;
2 |
3 | use eyre::Result;
4 | use futures::Future;
5 | use lazy_static::lazy_static;
6 | use serde::{de::DeserializeOwned, Deserialize, Serialize};
7 | use tracing::{debug, info};
8 |
9 | lazy_static! {
10 | pub static ref CACHE_DIR: String = {
11 | let mut path = dirs::cache_dir().expect("failed to get cache dir");
12 | path.push("ghtool");
13 | let cache_path = path.to_str().unwrap().to_string();
14 | info!(?path, "using cache path");
15 | cache_path
16 | };
17 | }
18 |
19 | #[derive(Serialize, Deserialize)]
20 | struct CacheValue {
21 | value: V,
22 | timestamp: SystemTime,
23 | }
24 |
25 | // The db needs to be opened in call to allow multiple processes
26 | pub fn put(key: K, value: V) -> Result<()>
27 | where
28 | K: AsRef<[u8]> + std::fmt::Debug,
29 | V: Serialize,
30 | {
31 | let db = open_db()?;
32 | let value = CacheValue {
33 | value,
34 | timestamp: SystemTime::now(),
35 | };
36 | let bytes = serde_json::to_vec(&value)?;
37 | db.insert(&key, bytes)?;
38 | debug!(?key, "cache key set");
39 | db.flush()?;
40 | Ok(())
41 | }
42 |
43 | pub fn get(key: K) -> Result