forked from mirrored/github-readme-stats
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8ee4eed743 |
@@ -1,34 +0,0 @@
|
||||
name: Push Docker
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
- 'develop'
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build image
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
platforms: linux/amd64,linux/arm64
|
||||
tags: |
|
||||
${{ vars.DOCKERHUB_TARGET }}:develop
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
name: Push Docker
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '[0-9.]+-[0-9]+-[0-9]+'
|
||||
# for this project, we do "YYYY-MM-DD" for version numbers, due to unversioned upstream
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build image
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
platforms: linux/amd64,linux/arm64
|
||||
tags: |
|
||||
${{ vars.DOCKERHUB_TARGET }}:latest
|
||||
${{ vars.DOCKERHUB_TARGET }}:${{ github.ref_name }}
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
name: Sync GitHub
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '**'
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Configure Git
|
||||
run: |
|
||||
git config --global user.name "Andrew Sync"
|
||||
git config --global user.email "sync@digitaladapt.com"
|
||||
|
||||
- name: Add GitHub Remote
|
||||
env:
|
||||
SYNC_TOKEN: ${{ secrets.SYNC_GITHUB_TOKEN }}
|
||||
SYNC_TARGET: ${{ vars.SYNC_GITHUB_TARGET }}
|
||||
run: |
|
||||
git remote add github "https://digitaladapt:${SYNC_TOKEN}@github.com/$SYNC_TARGET"
|
||||
|
||||
- name: Push Current Branch
|
||||
run: |
|
||||
git push github HEAD:${GITHUB_REF_NAME}
|
||||
|
||||
- name: Push Tags
|
||||
run: |
|
||||
git push github --tags
|
||||
|
||||
@@ -13,7 +13,7 @@ jobs:
|
||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
- name: Deployment Prep
|
||||
run: python ./.github/workflows/deploy-prep.py
|
||||
- uses: stefanzweifel/git-auto-commit-action@28e16e81777b558cc906c8750092100bbb34c5e3 # v7.0.0
|
||||
- uses: stefanzweifel/git-auto-commit-action@04702edda442b2e678b25b537cec683a1493fcb9 # v7.1.0
|
||||
with:
|
||||
branch: vercel
|
||||
create_branch: true
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
.vercel
|
||||
host.env
|
||||
.env
|
||||
node_modules
|
||||
*.lock
|
||||
.idea/
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
readme-stats.example.com {
|
||||
reverse_proxy readme_stats:9000
|
||||
}
|
||||
|
||||
-13
@@ -1,13 +0,0 @@
|
||||
FROM node:lts-alpine
|
||||
|
||||
# setup folder within the docker container with this app's files
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
|
||||
# add express.js as dependency and download node modules
|
||||
RUN npm install express.js
|
||||
|
||||
# start the app, on the supplied port
|
||||
EXPOSE $port
|
||||
CMD [ "node", "express.js" ]
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
networks:
|
||||
public:
|
||||
external: true
|
||||
|
||||
services:
|
||||
readme-stats:
|
||||
build: .
|
||||
container_name: readme-stats
|
||||
env_file:
|
||||
- .env
|
||||
expose:
|
||||
- ${port}
|
||||
healthcheck:
|
||||
test: wget --no-verbose -O - --tries=1 http://localhost:$$port/?username=$$GH_UN | grep 'GitHub Stats' || exit 1
|
||||
interval: 60m # hourly
|
||||
retries: 3
|
||||
start_interval: 1s
|
||||
start_period: 10s
|
||||
timeout: 5s
|
||||
init: true
|
||||
labels:
|
||||
- "com.centurylinklabs.watchtower.enable=false" # built, disable watchtower
|
||||
- homepage.group=Sites
|
||||
- homepage.name=Github Readme Stats
|
||||
- homepage.icon=github
|
||||
- homepage.href=https://readme.digitaladapt.com
|
||||
- kuma.__docker
|
||||
logging:
|
||||
driver: syslog
|
||||
options:
|
||||
tag: readme_stats
|
||||
networks:
|
||||
- public
|
||||
restart: always
|
||||
user: ${USER_ID}:${GROUP_ID}
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro # read-only
|
||||
|
||||
# allow watchtower to monitor for update to base image, since our container is built
|
||||
readme_stats_monitor:
|
||||
container_name: readme_stats_monitor
|
||||
entrypoint: "/bin/true"
|
||||
image: node:lts-alpine
|
||||
restart: no
|
||||
user: ${USER_ID}:${GROUP_ID}
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
services:
|
||||
readme_stats:
|
||||
build: .
|
||||
container_name: readme_stats
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env
|
||||
expose:
|
||||
- $port
|
||||
healthcheck:
|
||||
test: wget --no-verbose -O - --tries=1 http://localhost:$$port/?username=$$GH_UN | grep 'GitHub Stats' || exit 1
|
||||
interval: 60m # hourly
|
||||
retries: 3
|
||||
start_interval: 1s
|
||||
start_period: 10s
|
||||
timeout: 5s
|
||||
init: true
|
||||
|
||||
caddy:
|
||||
image: caddy
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
- "443:443/udp"
|
||||
depends_on:
|
||||
- readme_stats
|
||||
volumes:
|
||||
- ./Caddyfile:/etc/caddy/Caddyfile:ro
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
# github token
|
||||
PAT_1=<YOUR_GITHUB_TOKEN>
|
||||
# github username
|
||||
GH_UN=<YOUR_GITHUB_USERNAME>
|
||||
# port to listen on
|
||||
port=9000
|
||||
|
||||
+1
-9
@@ -18,14 +18,6 @@ router.get("/gist", gistCard);
|
||||
app.use("/api", router);
|
||||
|
||||
const port = process.env.PORT || process.env.port || 9000;
|
||||
const server = app.listen(port, "0.0.0.0", () => {
|
||||
app.listen(port, "0.0.0.0", () => {
|
||||
console.log(`Server running on port ${port}`);
|
||||
});
|
||||
|
||||
/* stop gracefully when requested */
|
||||
process.on("SIGTERM", () => {
|
||||
console.log("stopping, received SIGTERM signal");
|
||||
server.close(() => {
|
||||
process.exit();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
Get dynamically generated GitHub stats on your READMEs, with the ease of docker!
|
||||
|
||||
Fork of [https://github.com/anuraghazra/github-readme-stats](https://github.com/anuraghazra/github-readme-stats), gently wrapped in docker.
|
||||
|
||||
**Steps to setup:**
|
||||
* clone this repo into a folder.
|
||||
* copy docker-compose.yml.example to docker-compose.yml.
|
||||
* copy env.example to .env and update.
|
||||
* copy Caddyfile.example to Caddyfile and update.
|
||||
* and start with `docker compose up -d`.
|
||||
|
||||
docker-compose.yml.example has a very simple Caddy reverse proxy, for automatic https.
|
||||
|
||||
Files have example in their name, so that when you update, your local settings won't be overridden.
|
||||
|
||||
```
|
||||
git clone https://code.digitaladapt.com/andrew/github-readme-stats.git
|
||||
cd github-readme-stats
|
||||
cp docker-compose.yml.example docker-compose.yml
|
||||
cp env.example .env
|
||||
vim .env
|
||||
# add your github token
|
||||
|
||||
cp Caddyfile.example Caddyfile
|
||||
vim Caddyfile
|
||||
# configure your domain
|
||||
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
You might ask, why should I trust your docker image?
|
||||
|
||||
The answer is, you don't have to, there isn't an image,
|
||||
just a few commands in the Dockerfile, which you can and should look at.
|
||||
|
||||
@@ -85,13 +85,13 @@
|
||||
- [Stats and top languages cards](#stats-and-top-languages-cards)
|
||||
- [Pinning repositories](#pinning-repositories)
|
||||
- [Deploy on your own](#deploy-on-your-own)
|
||||
- [GitHub Actions (Recommended)](#github-actions-recommended)
|
||||
- [Self-hosted (Vercel/Other) (Recommended)](#self-hosted-vercelother-recommended)
|
||||
- [First step: get your Personal Access Token (PAT)](#first-step-get-your-personal-access-token-pat)
|
||||
- [On Vercel](#on-vercel)
|
||||
- [First step: get your Personal Access Token (PAT)](#first-step-get-your-personal-access-token-pat)
|
||||
- [Classic token](#classic-token)
|
||||
- [Fine-grained token](#fine-grained-token)
|
||||
- [On Vercel](#on-vercel)
|
||||
- [:film\_projector: Check Out Step By Step Video Tutorial By @codeSTACKr](#film_projector-check-out-step-by-step-video-tutorial-by-codestackr)
|
||||
- [On other platforms](#on-other-platforms)
|
||||
- [Available environment variables](#available-environment-variables)
|
||||
- [On other platforms](#on-other-platforms)
|
||||
- [Available environment variables](#available-environment-variables)
|
||||
- [Keep your fork up to date](#keep-your-fork-up-to-date)
|
||||
- [:sparkling\_heart: Support the project](#sparkling_heart-support-the-project)
|
||||
</details>
|
||||
@@ -99,7 +99,7 @@
|
||||
# Important Notices <!-- omit in toc -->
|
||||
|
||||
> [!IMPORTANT]
|
||||
> The public Vercel instance at `https://github-readme-stats.vercel.app/api` is best-effort and can be unreliable due to rate limits and traffic spikes (see [#1471](https://github.com/anuraghazra/github-readme-stats/issues/1471)). We use caching to improve stability (see [common options](#common-options)), but for reliable cards we recommend [self-hosting](#deploy-on-your-own) (Vercel or other) or using the [GitHub Actions workflow](#github-actions-recommended) to generate cards in your [profile repository](https://docs.github.com/en/account-and-profile/how-tos/profile-customization/managing-your-profile-readme).
|
||||
> Since the GitHub API only [allows 5k requests per hour per user account](https://docs.github.com/en/graphql/overview/resource-limitations), the public Vercel instance hosted on `https://github-readme-stats.vercel.app/api` could possibly hit the rate limiter (see [#1471](https://github.com/anuraghazra/github-readme-stats/issues/1471)). We use caching to prevent this from happening (see https://github.com/anuraghazra/github-readme-stats#common-options). You can turn off these rate limit protections by [deploying your own Vercel instance](#deploy-on-your-own).
|
||||
|
||||
<img alt="Uptime Badge" src="https://img.shields.io/endpoint?url=https%3A%2F%2Fgithub-readme-stats-git-monitoring-github-readme-stats-team.vercel.app%2Fapi%2Fstatus%2Fup%3Ftype%3Dshields">
|
||||
|
||||
@@ -796,66 +796,15 @@ By default, GitHub does not lay out the cards side by side. To do that, you can
|
||||
|
||||
</details>
|
||||
|
||||
# Deploy on your own (recommended)
|
||||
# Deploy on your own
|
||||
|
||||
Because the public endpoint is [not reliable](#Important-Notices), we recommend self-deployment via GitHub Actions or your own hosted instance. GitHub Actions is the simplest setup with static SVGs stored in your repo but less frequent updates, while self-hosting takes more work and can serve fresher stats (with caching).
|
||||
|
||||
## GitHub Actions
|
||||
|
||||
GitHub Actions generates static SVGs and avoids per-request API calls. By default it uses `GITHUB_TOKEN` (public stats only), for private stats, set a [PAT](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) as a secret and pass it to the action instead.
|
||||
|
||||
Create `/.github/workflows/grs.yml` in your profile repo (`USERNAME/USERNAME`):
|
||||
|
||||
```yaml
|
||||
name: Update README cards
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 3 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Generate stats card
|
||||
uses: readme-tools/github-readme-stats-action@v1
|
||||
with:
|
||||
card: stats
|
||||
options: username=${{ github.repository_owner }}&show_icons=true
|
||||
path: profile/stats.svg
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Commit cards
|
||||
run: |
|
||||
git config user.name "github-actions"
|
||||
git config user.email "github-actions@users.noreply.github.com"
|
||||
git add profile/*.svg
|
||||
git commit -m "Update README cards" || exit 0
|
||||
git push
|
||||
```
|
||||
|
||||
Then embed from your profile README:
|
||||
|
||||
```md
|
||||

|
||||
```
|
||||
|
||||
See more options and examples in the [GitHub Readme Stats Action README](https://github.com/readme-tools/github-readme-stats-action#readme).
|
||||
|
||||
## Self-hosted (Vercel/Other)
|
||||
|
||||
Running your own instance avoids public rate limits and gives you full control over caching, tokens, and private stats.
|
||||
|
||||
### First step: get your Personal Access Token (PAT)
|
||||
## First step: get your Personal Access Token (PAT)
|
||||
|
||||
For deploying your own instance of GitHub Readme Stats, you will need to create a GitHub Personal Access Token (PAT). Below are the steps to create one and the scopes you need to select for both classic and fine-grained tokens.
|
||||
|
||||
Selecting the right scopes for your token is important in case you want to display private contributions on your cards.
|
||||
|
||||
#### Classic token
|
||||
### Classic token
|
||||
|
||||
* Go to [Account -> Settings -> Developer Settings -> Personal access tokens -> Tokens (classic)](https://github.com/settings/tokens).
|
||||
* Click on `Generate new token -> Generate new token (classic)`.
|
||||
@@ -864,7 +813,7 @@ Selecting the right scopes for your token is important in case you want to displ
|
||||
* read:user
|
||||
* Click on `Generate token` and copy it.
|
||||
|
||||
#### Fine-grained token
|
||||
### Fine-grained token
|
||||
|
||||
> [!WARNING]\
|
||||
> This limits the scope to issues in your repositories and includes only public commits.
|
||||
@@ -881,7 +830,7 @@ Selecting the right scopes for your token is important in case you want to displ
|
||||
* Pull requests: read-only
|
||||
* Click on `Generate token` and copy it.
|
||||
|
||||
### On Vercel
|
||||
## On Vercel
|
||||
|
||||
### :film\_projector: [Check Out Step By Step Video Tutorial By @codeSTACKr](https://youtu.be/n6d4KHSKqGk?t=107)
|
||||
|
||||
@@ -917,7 +866,7 @@ Since the GitHub API only allows 5k requests per hour, my `https://github-readme
|
||||
|
||||
</details>
|
||||
|
||||
### On other platforms
|
||||
## On other platforms
|
||||
|
||||
> [!WARNING]
|
||||
> This way of using GRS is not officially supported and was added to cater to some particular use cases where Vercel could not be used (e.g. [#2341](https://github.com/anuraghazra/github-readme-stats/discussions/2341)). The support for this method, therefore, is limited.
|
||||
@@ -934,7 +883,7 @@ Since the GitHub API only allows 5k requests per hour, my `https://github-readme
|
||||
5. You're done 🎉
|
||||
</details>
|
||||
|
||||
### Available environment variables
|
||||
## Available environment variables
|
||||
|
||||
GitHub Readme Stats provides several environment variables that can be used to customize the behavior of your self-hosted instance. These include:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user