Compare commits

..
Author SHA1 Message Date
xixu-me 1e8a927f9b Merge pull request #4 from xixu-me/dependabot/github_actions/actions/checkout-5
ci(deps): bump actions/checkout from 4 to 5
2025-08-18 13:14:46 +08:00
dependabot[bot] 3f07d81f85 ci(deps): bump actions/checkout from 4 to 5
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-18 04:34:23 +00:00
xixu-me c1a2e04ba3 Merge pull request #3 from xixu-me/dependabot/github_actions/actions/download-artifact-5
ci(deps): bump actions/download-artifact from 4 to 5
2025-08-11 12:16:04 +08:00
dependabot[bot] fa11b36353 ci(deps): bump actions/download-artifact from 4 to 5
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-11 04:07:06 +00:00
xixu-me b35c13d09c Merge pull request #2 from xixu-me/dependabot/github_actions/softprops/action-gh-release-2
ci(deps): bump softprops/action-gh-release from 1 to 2
2025-06-30 03:09:17 +08:00
dependabot[bot] 54e7fdb695 ci(deps): bump softprops/action-gh-release from 1 to 2
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 1 to 2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v1...v2)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: '2'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-29 19:08:36 +00:00
xixu-me e1e3c339c7 Create dependabot.yml 2025-06-30 03:08:00 +08:00
xixu-me cc9a12ebc8 Remove high failure rate detection in workflow
Eliminated the logic that stopped execution if favicon download failures exceeded 80% after 100 domains. The workflow will now continue processing all domains regardless of failure rate.
2025-06-10 18:09:46 +08:00
xixu-me 2939d28e64 Update favicon naming conventions
Updated the favicon naming conventions in both the workflow file and README to use the full domain name instead of the second-level domain. This ensures unique filenames and preserves complete domain information.
2025-06-10 16:00:40 +08:00
xixu-me 2e9639457d Simplify favicon filename generation in workflow
Removed the use of associative arrays and second-level domain logic for favicon filename generation. Filenames now use the full domain directly, simplifying the code and reducing complexity.
2025-06-10 15:54:18 +08:00
xixu-me b8f6b82874 Improve favicon download logic in workflow
Revised the favicon download logic to use temporary files and associative arrays for better handling of duplicate filenames and sequential numbering. Enhanced error handling and ensured proper file renaming after successful downloads.
2025-06-10 15:46:13 +08:00
xixu-me 063dfaa1aa Remove jsDelivr CDN cache purge step
The step to purge jsDelivr CDN cache for the assets branch has been removed from the GitHub Actions workflow. This change simplifies the workflow by eliminating unnecessary cache management.
2025-06-10 15:26:21 +08:00
xixu-me 0cbfb9f538 Add jsDelivr CDN link to README
Updated the README to include a jsDelivr CDN link for accessing favicons, providing better performance and global availability.
2025-06-10 11:19:11 +08:00
xixu-me f1cfff13b0 Refactor jsDelivr cache purge in workflow
Replaced the standalone 'purge-jsdelivr-cache' job with an inline step in the main workflow. The new implementation purges jsDelivr CDN cache for PNG files in the 'favicons' directory, improving progress tracking and simplifying the workflow structure.
2025-06-10 11:10:14 +08:00
xixu-me 7dcdce9a1c Remove Dependabot config and update workflow
Deleted the Dependabot configuration file as it is no longer needed. Updated the GitHub Actions workflow to simplify the installation step for the 'tzst' tool by adjusting the log message.
2025-06-10 10:51:59 +08:00
xixu-me 4aa7f66fea Add jsDelivr cache purge workflow
Introduced a new workflow step to purge the jsDelivr CDN cache after processing favicons and releases. Updated the GitHub Release action to use version v1 for better compatibility.
2025-06-10 10:47:20 +08:00
xixu-me 29d9af9975 Update GitHub Release action version
Bumped the version of softprops/action-gh-release from v2 to v2.3.0 in the GitHub Actions workflow to ensure compatibility and access to the latest features.
2025-06-10 10:42:19 +08:00
xixu-me f17483367e Update permissions in GitHub Actions workflow
Adjusted permissions for jobs in the workflow file to ensure appropriate access levels. Updated global and job-specific permissions for better security and functionality.
2025-06-10 10:34:46 +08:00
xixu-me f584eab3d3 Update domain count list in README
Removed the 'minimal' label for the 200 domain count and removed entries for 500,000 and 1,000,000 domain counts from the README.
2025-06-10 10:21:32 +08:00
xixu-me fbc2e08152 Merge branch 'main' of https://github.com/xixu-me/favicons 2025-06-10 10:19:00 +08:00
xixu-me df16f1f920 Merge pull request #1 from xixu-me/dependabot/github_actions/softprops/action-gh-release-2
Bump softprops/action-gh-release from 1 to 2
2025-06-09 23:37:47 +08:00
dependabot[bot] a052b220c2 Bump softprops/action-gh-release from 1 to 2
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 1 to 2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v1...v2)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: '2'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-09 14:31:38 +00:00
xixu-me 3b60ac5b30 Update dependabot.yml 2025-06-09 22:02:22 +08:00
xixu-me 10bd59ca3d Create dependabot.yml 2025-06-09 22:00:11 +08:00
4 changed files with 27 additions and 209 deletions

No files matched your search

+20
View File
@@ -19,3 +19,23 @@ updates:
labels:
- "dependencies"
- "github-actions"
# Monitor pip dependencies (for tzst package used in workflow)
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "02:30"
timezone: "UTC"
open-pull-requests-limit: 3
reviewers:
- "xixu-me"
assignees:
- "xixu-me"
commit-message:
prefix: "deps"
include: "scope"
labels:
- "dependencies"
- "python"
-202
View File
@@ -1,202 +0,0 @@
name: Dependabot Auto Merge
on:
check_suite:
types: [completed]
workflow_run:
workflows:
- "CodeQL"
- "Dependabot Updates"
- "The Workflow"
types:
- completed
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.workflow_run.head_branch || github.run_id }}
cancel-in-progress: false
permissions:
contents: write
pull-requests: write
checks: read
statuses: read
jobs:
merge:
name: Auto-merge Dependabot PRs
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Merge Dependabot PRs when checks pass
uses: actions/github-script@v9
with:
script: |
const owner = context.repo.owner;
const repo = context.repo.repo;
const successfulCheckConclusions = new Set(["success", "skipped", "neutral"]);
const successfulStatusStates = new Set(["success"]);
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
const latestBy = (items, keyOf, timeOf) => {
const latest = new Map();
for (const item of items) {
const key = keyOf(item);
const itemTime = new Date(timeOf(item) || 0).getTime();
const existing = latest.get(key);
const existingTime = existing ? new Date(timeOf(existing) || 0).getTime() : -1;
if (!existing || itemTime >= existingTime) {
latest.set(key, item);
}
}
return [...latest.values()];
};
const findCandidatePulls = async () => {
const pulls = await github.paginate(github.rest.pulls.list, {
owner,
repo,
state: "open",
per_page: 100,
});
return pulls.filter((pr) => pr.user?.login === "dependabot[bot]");
};
const getMergeablePullRequest = async (pull_number) => {
for (let attempt = 1; attempt <= 6; attempt += 1) {
const { data: pr } = await github.rest.pulls.get({ owner, repo, pull_number });
if (pr.mergeable !== null) {
return pr;
}
core.info("PR #" + pull_number + " mergeability is still being computed; retry " + attempt + "/6.");
await wait(5000);
}
const { data: pr } = await github.rest.pulls.get({ owner, repo, pull_number });
return pr;
};
const getSignalState = async (sha) => {
const checkRuns = await github.paginate(github.rest.checks.listForRef, {
owner,
repo,
ref: sha,
per_page: 100,
});
const statuses = await github.paginate(github.rest.repos.listCommitStatusesForRef, {
owner,
repo,
ref: sha,
per_page: 100,
});
const latestChecks = latestBy(
checkRuns.filter((run) => run.name !== "Dependabot Auto Merge"),
(run) => (run.app?.slug || "unknown") + ":" + run.name,
(run) => run.completed_at || run.started_at || run.created_at,
);
const latestStatuses = latestBy(statuses, (status) => status.context, (status) => status.updated_at || status.created_at);
const pendingChecks = latestChecks.filter((run) => run.status !== "completed");
const failedChecks = latestChecks.filter(
(run) => run.status === "completed" && !successfulCheckConclusions.has(String(run.conclusion || "").toLowerCase()),
);
const failedStatuses = latestStatuses.filter((status) => !successfulStatusStates.has(String(status.state || "").toLowerCase()));
return {
totalSignals: latestChecks.length + latestStatuses.length,
pendingChecks,
failedChecks,
failedStatuses,
};
};
const { data: repository } = await github.rest.repos.get({ owner, repo });
const mergeMethods = [];
if (repository.allow_merge_commit) mergeMethods.push("merge");
if (repository.allow_squash_merge) mergeMethods.push("squash");
if (repository.allow_rebase_merge) mergeMethods.push("rebase");
if (mergeMethods.length === 0) {
core.info("This repository has no enabled pull request merge methods.");
return;
}
const pulls = await findCandidatePulls();
if (pulls.length === 0) {
core.info("No open Dependabot PRs to evaluate.");
return;
}
for (const candidate of pulls) {
const pull_number = candidate.number;
const pr = await getMergeablePullRequest(pull_number);
if (pr.user?.login !== "dependabot[bot]") {
core.info("PR #" + pull_number + " is no longer a Dependabot PR.");
continue;
}
if (pr.state !== "open" || pr.draft) {
core.info("PR #" + pull_number + " is not an open, ready PR.");
continue;
}
if (pr.mergeable !== true) {
core.info("PR #" + pull_number + " is not currently mergeable.");
continue;
}
const signalState = await getSignalState(pr.head.sha);
if (signalState.totalSignals === 0) {
core.info("PR #" + pull_number + " has no checks or statuses yet; skipping.");
continue;
}
if (signalState.pendingChecks.length > 0) {
core.info("PR #" + pull_number + " still has pending checks: " + signalState.pendingChecks.map((run) => run.name).join(", ") + ".");
continue;
}
if (signalState.failedChecks.length > 0 || signalState.failedStatuses.length > 0) {
const failedChecks = signalState.failedChecks.map((run) => run.name + "=" + run.conclusion).join(", ");
const failedStatuses = signalState.failedStatuses.map((status) => status.context + "=" + status.state).join(", ");
core.info("PR #" + pull_number + " is not green. Checks: " + (failedChecks || "none") + ". Statuses: " + (failedStatuses || "none") + ".");
continue;
}
let merged = false;
let lastError = null;
for (const merge_method of mergeMethods) {
try {
await github.rest.pulls.merge({ owner, repo, pull_number, merge_method });
core.info("Merged Dependabot PR #" + pull_number + " with " + merge_method + ".");
merged = true;
break;
} catch (error) {
lastError = error;
if (error.status === 403 || error.status === 405 || error.status === 409) {
core.info("Cannot merge PR #" + pull_number + " with " + merge_method + ": " + error.message);
continue;
}
throw error;
}
}
if (!merged) {
core.info("PR #" + pull_number + " could not be merged: " + (lastError?.message || "unknown error") + ".");
continue;
}
if (pr.head.repo?.full_name === owner + "/" + repo) {
try {
await github.rest.git.deleteRef({ owner, repo, ref: "heads/" + pr.head.ref });
core.info("Deleted branch " + pr.head.ref + ".");
} catch (error) {
core.info("Could not delete branch " + pr.head.ref + ": " + error.message);
}
}
}
+5 -5
View File
@@ -46,7 +46,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v7
uses: actions/checkout@v5
- name: Fetch top domains from Cloudflare Radar API
run: |
@@ -63,7 +63,7 @@ jobs:
echo "Domain list processed. Total domains: $(wc -l < domains)"
- name: Upload domain list as artifact
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: domain-list-artifact
path: domains
@@ -78,10 +78,10 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v7
uses: actions/checkout@v5
- name: Download domain list artifact
uses: actions/download-artifact@v8
uses: actions/download-artifact@v5
with:
name: domain-list-artifact
path: .
@@ -221,7 +221,7 @@ jobs:
echo "Generated release tag: $TAG"
- name: Create GitHub Release
uses: softprops/action-gh-release@v3
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.tag.outputs.tag }}
name: "Archive (Top ${{ env.DOMAIN_COUNT }}) - ${{ steps.tag.outputs.tag }}"
+2 -2
View File
@@ -22,13 +22,13 @@ Individual favicons are stored in the `assets` branch and are named according to
Access patterns:
```
https://raw.githubusercontent.com/xixu-me/favicons/refs/heads/assets/favicons/DOMAIN_NAME.png
https://raw.githubusercontent.com/xixu-me/favicons/assets/DOMAIN_NAME.png
```
For better performance and global availability, you can access the favicons through jsDelivr CDN:
```
https://cdn.jsdelivr.net/gh/xixu-me/favicons@refs/heads/assets/favicons/DOMAIN_NAME.png
https://cdn.jsdelivr.net/gh/xixu-me/favicons@assets/DOMAIN_NAME.png
```
### Download Compressed Archives