The great refactor (#82)
This commit is contained in:
113
.github/readme/partials/setup/action.md
vendored
Normal file
113
.github/readme/partials/setup/action.md
vendored
Normal file
@@ -0,0 +1,113 @@
|
||||
## ⚙️ Using GitHub Action on your profile repository (~5 min setup)
|
||||
|
||||
Setup a GitHub Action which runs periodically and pushes your generated metrics image to your repository.
|
||||
See all supported options in [action.yml](action.yml).
|
||||
|
||||
Assuming your username is `my-github-user`, you can then embed rendered metrics in your readme like below:
|
||||
|
||||
```markdown
|
||||
<!-- If you're using "master" as default branch -->
|
||||

|
||||
<!-- If you're using "main" as default branch -->
|
||||

|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>💬 How to setup?</summary>
|
||||
|
||||
### 0. Setup your personal repository
|
||||
|
||||
Create a repository with the same name as your GitHub login (if it's not already done).
|
||||
|
||||

|
||||
|
||||
Its `README.md` will be displayed on your user profile:
|
||||
|
||||

|
||||
|
||||
### 1. Create a GitHub personal token
|
||||
|
||||
From the `Developer settings` of your account settings, select `Personal access tokens` to create a new token.
|
||||
|
||||
No additional scopes are needed for basic metrics, but you may have to grant additional scope depending on what features you're planning to use:
|
||||
- `public_repo` scope for some plugins
|
||||
- `read:org` scope for all organizations related metrics
|
||||
- `repo` scope for all private repositories related metrics
|
||||
|
||||

|
||||
|
||||
A scope-less token can still display private contributions by enabling `Include private contributions on my profile` in your account settings:
|
||||
|
||||

|
||||
|
||||
If a plugin has not enough scopes to operate (and `plugins_errors_fatal` isn't enabled), it'll be reported in the rendering like below:
|
||||
|
||||

|
||||
|
||||
### 2. Put your GitHub perosnal token in your repository secrets
|
||||
|
||||
Go to the `Settings` of your repository to create a new secret and paste your freshly generated GitHub token there.
|
||||
|
||||

|
||||
|
||||
### 3. Create a GitHub Action workflow in your repository
|
||||
|
||||
Create a new workflow from the `Actions` tab of your repository and paste the following:
|
||||
|
||||
```yaml
|
||||
name: Metrics
|
||||
on:
|
||||
# Schedule updates (each hour)
|
||||
schedule: [{cron: "0 * * * *"}]
|
||||
# Lines below let you run workflow manually and on each commit (optional)
|
||||
push: {branches: ["master", "main"]}
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
github-metrics:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# See action.yml for all options
|
||||
- uses: lowlighter/metrics@latest
|
||||
with:
|
||||
# Your GitHub token
|
||||
token: ${{ secrets.METRICS_TOKEN }}
|
||||
# GITHUB_TOKEN is a special auto-generated token restricted to current repository, which is used to push files in it
|
||||
committer_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
```
|
||||
|
||||
See all supported options in [action.yml](action.yml).
|
||||
|
||||
Rendered metrics will be committed to your repository on each run.
|
||||
|
||||

|
||||
|
||||
#### Choosing between `@latest`, `@master` or a fork
|
||||
|
||||
If you wish to use new features as they're being released, you can switch from `@latest` to `@master`.
|
||||
As the latter is used as a development branch, jobs may fail from time to time (although we try to mitigate this).
|
||||
|
||||
When using a token with additional permissions, it is advised to fork this repository and use it instead to minimize security risks:
|
||||
```yaml
|
||||
- uses: my-github-username/metrics@master
|
||||
```
|
||||
|
||||
In this case, please consider watching new releases to stay up-to-date and enjoy latest features!
|
||||
|
||||
`@latest` will be updated on each release soon after [Planned for next release](https://github.com/lowlighter/metrics/projects/1#column-12378679) is emptied. Metrics doesn't introduce breaking changes **from an user point of view** (i.e. your workflows will always be valid) so you can follow release cycles without worrying.
|
||||
|
||||
#### Examples workflows
|
||||
|
||||
Metrics displayed on this page are rendered from this [workflow](https://github.com/lowlighter/lowlighter/blob/master/.github/workflows/metrics.yml). You can check it for some code examples.
|
||||
|
||||
### 4. Embed link into your README.md
|
||||
|
||||
Update your README.md to embed your metrics:
|
||||
|
||||
```markdown
|
||||
<!-- If you're using "master" as default branch -->
|
||||

|
||||
<!-- If you're using "main" as default branch -->
|
||||

|
||||
```
|
||||
|
||||
</details>
|
||||
21
.github/readme/partials/setup/shared.md
vendored
Normal file
21
.github/readme/partials/setup/shared.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
## 💕 Using the shared instance (~1 min setup, but with limitations)
|
||||
|
||||
For convenience, you can use the shared instance available at [metrics.lecoq.io](https://metrics.lecoq.io) without any additional setup.
|
||||
|
||||
```markdown
|
||||

|
||||
```
|
||||
|
||||
This is mostly intended for previews, to enjoy all features consider using GitHub Action instead.
|
||||
|
||||
<details>
|
||||
<summary>💬 Fair use</summary>
|
||||
|
||||
To ensure service availability, shared instance has a few limitations:
|
||||
* Images are cached for 1 hour
|
||||
* Rendered metrics **won't be updated** during this time window when queried
|
||||
* You can manually update rendering againg your metrics on [metrics.lecoq.io](https://metrics.lecoq.io)
|
||||
* There is a rate limiter enabled (it doesn't affect already cached metrics)
|
||||
* Several plugins may not be available
|
||||
|
||||
</details>
|
||||
140
.github/readme/partials/setup/web.md
vendored
Normal file
140
.github/readme/partials/setup/web.md
vendored
Normal file
@@ -0,0 +1,140 @@
|
||||
## 🏗️ Deploying your own web instance (~15 min setup, depending on your sysadmin knowledge)
|
||||
|
||||
|
||||
Setup a metrics instance on your server if you don't want to use GitHub Actions and [metrics.lecoq.io](https://metrics.lecoq.io).
|
||||
See all supported options in [settings.example.json](settings.example.json).
|
||||
|
||||
Assuming your username is `my-github-user`, you can then embed rendered metrics in your readme like below:
|
||||
|
||||
```markdown
|
||||

|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>💬 How to setup?</summary>
|
||||
|
||||
### 0. Prepare your server
|
||||
|
||||
You'll need a server with a recent version [NodeJS](https://nodejs.org) (see used version in [Dockerfile](Dockerfile#L1-L2)).
|
||||
|
||||
### 1. Create a GitHub personal token
|
||||
|
||||
From the `Developer settings` of your account settings, select `Personal access tokens` to create a new token.
|
||||
|
||||
No additional scopes are needed.
|
||||
|
||||

|
||||
|
||||
### 2. Install dependencies
|
||||
|
||||
Clone repository, install dependencies and copy configuration example to `settings.json`:
|
||||
|
||||
```shell
|
||||
git clone https://github.com/lowlighter/metrics.git
|
||||
cd metrics/
|
||||
npm install --only=prod
|
||||
cp settings.example.json settings.json
|
||||
```
|
||||
|
||||
### 3. Configure your instance and start it
|
||||
|
||||
Edit `settings.json` to configure your instance.
|
||||
|
||||
```javascript
|
||||
{
|
||||
//GitHub API token
|
||||
"token":"GITHUB_TOKEN",
|
||||
//Other options...
|
||||
}
|
||||
```
|
||||
|
||||
See all supported options in [settings.example.json](settings.example.json).
|
||||
|
||||
If you plan to make your web instance public, it is advised to restrict its access thanks to rate limiter and access list.
|
||||
|
||||
Once you've finished configuring metrics, start your instance:
|
||||
|
||||
```shell
|
||||
npm start
|
||||
```
|
||||
|
||||
Access your server with provided port in `setting.json` from your browser to ensure everything is working.
|
||||
|
||||
### 4. Embed link into your README.md
|
||||
|
||||
Edit your repository readme and add your metrics image from your server domain:
|
||||
|
||||
```markdown
|
||||

|
||||
```
|
||||
|
||||
### 6. (optional) Setup your instance as a service
|
||||
|
||||
To ensure that your instance will restart if it reboots or crashes, you should set it up as a service.
|
||||
This is described below for Linux-like systems which support *systemd*.
|
||||
|
||||
Create a new service file `/etc/systemd/system/github_metrics.service` and paste the following after editing paths inside:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Metrics
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/path/to/metrics
|
||||
ExecStart=/usr/bin/node /path/to/metrics/index.mjs
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
Reload services, enable it, start it and check if it is up and running:
|
||||
|
||||
```shell
|
||||
systemctl daemon-reload
|
||||
systemctl enable github_metrics
|
||||
systemctl start github_metrics
|
||||
systemctl status github_metrics
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚠️ HTTP errors code</summary>
|
||||
|
||||
Following error codes may be encountered on web instance:
|
||||
|
||||
| Error code | Description |
|
||||
| ------------------------- | -------------------------------------------------------------------------- |
|
||||
| `400 Bad request` | Invalid query (e.g. unsupported template) |
|
||||
| `403 Forbidden` | User not allowed in `restricted` users list |
|
||||
| `404 Not found` | GitHub API did not found the requested user |
|
||||
| `429 Too many requests` | Thrown when rate limiter is trigerred |
|
||||
| `500 Internal error` | Server error while generating metrics images (check logs for more details) |
|
||||
| `503 Service unavailable` | Maximum user capacity reached, only cached images can be accessed for now |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🔗 HTTP parameters</summary>
|
||||
|
||||
Most of options from [action.yml](action.yml) are actually supported by web instance, though syntax is slightly different.
|
||||
All underscores (`_`) must be replaced by dots (`.`) and `plugin_` prefixes must be dropped.
|
||||
|
||||
For example, to configure pagespeed plugin you'd use the following:
|
||||
```
|
||||
https://my-personal-domain.com/my-github-user?pagespeed=1&pagespeed.detailed=1&pagespeed.url=https%3A%2F%2Fexample.com
|
||||
```
|
||||
|
||||
Note that url parameters must be [encoded](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/encodeURIComponent).
|
||||
|
||||
As for `base` content, which is enabled by default, sections are available through "`base.<section>`".
|
||||
|
||||
For example, to display only `repositories` section, use:
|
||||
```
|
||||
https://my-personal-domain.com/my-github-user?base=0&base.repositories=1
|
||||
```
|
||||
|
||||
</details>
|
||||
Reference in New Issue
Block a user