Compare commits

...
29 Commits
Author SHA1 Message Date
xixu-me 2a9fc29bb7 Merge pull request #5 from xixu-me/dependabot/github_actions/actions/upload-artifact-5
ci(deps): bump actions/upload-artifact from 4 to 5
2025-10-27 10:39:41 +08:00
xixu-me bf8eebf107 Merge pull request #6 from xixu-me/dependabot/github_actions/actions/download-artifact-6
ci(deps): bump actions/download-artifact from 5 to 6
2025-10-27 10:39:10 +08:00
dependabot[bot] 59473d7eb4 ci(deps): bump actions/download-artifact from 5 to 6
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v5...v6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-27 02:37:07 +00:00
dependabot[bot] 1d50b435f9 ci(deps): bump actions/upload-artifact from 4 to 5
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-27 02:35:25 +00:00
xixu-me d293377547 Update favicon access URLs in README
Revised the example URLs for accessing favicons directly and via jsDelivr CDN to include the correct path with 'refs/heads/assets/favicons/'.
2025-08-31 19:17:35 +08:00
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
3 changed files with 93 additions and 61 deletions

No files matched your search

+41
View File
@@ -0,0 +1,41 @@
version: 2
updates:
# Monitor GitHub Actions dependencies
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "02:00"
timezone: "UTC"
open-pull-requests-limit: 5
reviewers:
- "xixu-me"
assignees:
- "xixu-me"
commit-message:
prefix: "ci"
include: "scope"
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"
+37 -47
View File
@@ -13,18 +13,20 @@ on:
default: "200000" default: "200000"
type: string type: string
# Add permissions for the workflow
permissions:
contents: write
actions: read
env: env:
# Default domain count (can be overridden by workflow input) # Default domain count (can be overridden by workflow input)
DOMAIN_COUNT: ${{ github.event.inputs.domain_count || '200000' }} DOMAIN_COUNT: ${{ github.event.inputs.domain_count || '200000' }}
# Global permissions for the workflow
permissions:
contents: write
actions: write
jobs: jobs:
validate-input: validate-input:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
contents: read
steps: steps:
- name: Validate domain count input - name: Validate domain count input
run: | run: |
@@ -38,10 +40,13 @@ jobs:
fetch-domain-list: fetch-domain-list:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: validate-input needs: validate-input
permissions:
contents: read
actions: write
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v5
- name: Fetch top domains from Cloudflare Radar API - name: Fetch top domains from Cloudflare Radar API
run: | run: |
@@ -58,7 +63,7 @@ jobs:
echo "Domain list processed. Total domains: $(wc -l < domains)" echo "Domain list processed. Total domains: $(wc -l < domains)"
- name: Upload domain list as artifact - name: Upload domain list as artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v5
with: with:
name: domain-list-artifact name: domain-list-artifact
path: domains path: domains
@@ -67,13 +72,16 @@ jobs:
process-favicons-and-release: process-favicons-and-release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: fetch-domain-list needs: fetch-domain-list
permissions:
contents: write
actions: read
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v5
- name: Download domain list artifact - name: Download domain list artifact
uses: actions/download-artifact@v4 uses: actions/download-artifact@v6
with: with:
name: domain-list-artifact name: domain-list-artifact
path: . path: .
@@ -95,9 +103,6 @@ jobs:
success_count=0 success_count=0
error_count=0 error_count=0
# Array to track used filenames for duplicate handling
declare -A filename_count
# Read domains file line by line # Read domains file line by line
while IFS= read -r domain; do while IFS= read -r domain; do
counter=$((counter + 1)) counter=$((counter + 1))
@@ -112,62 +117,47 @@ jobs:
echo "Progress: $counter/$total_domains domains processed (Success: $success_count, Errors: $error_count)" echo "Progress: $counter/$total_domains domains processed (Success: $success_count, Errors: $error_count)"
fi fi
# Extract second-level domain (remove top-level domain)
# For example: google.com -> google, github.io -> github
second_level_domain=$(echo "$domain" | sed 's/\.[^.]*$//')
# Handle duplicate filenames by adding sequential numbers
base_filename="$second_level_domain"
if [[ -n "${filename_count[$base_filename]}" ]]; then
# Increment count for this filename
filename_count[$base_filename]=$((filename_count[$base_filename] + 1))
final_filename="${base_filename}_${filename_count[$base_filename]}"
else
# First occurrence of this filename
filename_count[$base_filename]=0
final_filename="$base_filename"
fi
# Construct favicon URL # Construct favicon URL
favicon_url="https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://${domain}&size=256" favicon_url="https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://${domain}&size=256"
favicon_file="favicons/${final_filename}.png"
# Temporarily use a temp file for download
temp_favicon_file="favicons/temp_favicon.png"
# Download favicon with enhanced error handling and timeout # Download favicon with enhanced error handling and timeout
if timeout 15 curl -L -s -o "$favicon_file" "$favicon_url" --max-time 10 --retry 3 --retry-delay 1; then if timeout 15 curl -L -s -o "$temp_favicon_file" "$favicon_url" --max-time 10 --retry 3 --retry-delay 1; then
# Check if file was actually downloaded and has content # Check if file was actually downloaded and has content
if [ -s "$favicon_file" ]; then if [ -s "$temp_favicon_file" ]; then
# Calculate SHA-256 hash of the downloaded file # Calculate SHA-256 hash of the downloaded file
file_hash=$(sha256sum "$favicon_file" | cut -d' ' -f1) file_hash=$(sha256sum "$temp_favicon_file" | cut -d' ' -f1)
# Check if the hash matches the failure hash # Check if the hash matches the failure hash
if [ "$file_hash" = "59bfe9bc385ad69f50793ce4a53397316d7a875a7148a63c16df9b674c6cda64" ]; then if [ "$file_hash" = "59bfe9bc385ad69f50793ce4a53397316d7a875a7148a63c16df9b674c6cda64" ]; then
# This is a failed download (generic/default favicon) # This is a failed download (generic/default favicon)
rm -f "$favicon_file" rm -f "$temp_favicon_file"
error_count=$((error_count + 1)) error_count=$((error_count + 1))
echo "Warning: Generic favicon detected for domain: $domain (mapped to $final_filename) (SHA-256: $file_hash)" echo "Warning: Generic favicon detected for domain: $domain (SHA-256: $file_hash)"
else else
# Valid favicon downloaded - use domain as filename
favicon_file="favicons/${domain}.png"
mv "$temp_favicon_file" "$favicon_file"
# Valid favicon downloaded # Valid favicon downloaded
success_count=$((success_count + 1)) success_count=$((success_count + 1))
echo "Success: Downloaded favicon for $domain -> $final_filename.png" echo "Success: Downloaded favicon for $domain -> ${domain}.png"
fi fi
else else
# Remove empty file # Remove empty file
rm -f "$favicon_file" rm -f "$temp_favicon_file"
error_count=$((error_count + 1)) error_count=$((error_count + 1))
echo "Warning: Empty file for domain: $domain (mapped to $final_filename)" echo "Warning: Empty file for domain: $domain"
fi fi
else else
# Remove any partial file # Remove any partial file
rm -f "$favicon_file" rm -f "$temp_favicon_file"
error_count=$((error_count + 1)) error_count=$((error_count + 1))
echo "Error: Failed to download favicon for domain: $domain (mapped to $final_filename)" echo "Error: Failed to download favicon for domain: $domain"
fi fi
# Add high failure rate detection (stop if >80% failures after 100 domains)
if [ $counter -gt 100 ] && [ $((error_count * 100 / counter)) -gt 80 ]; then
echo "Error: High failure rate detected (${error_count}/${counter}). Stopping execution."
exit 1
fi
done < domains done < domains
echo "Favicon download completed!" echo "Favicon download completed!"
@@ -201,9 +191,9 @@ jobs:
git push origin assets --force git push origin assets --force
fi fi
- name: Install tzst compression tool - name: Install tzst
run: | run: |
echo "Installing tzst compression tool..." echo "Installing tzst..."
pip install tzst pip install tzst
tzst --version tzst --version
@@ -231,7 +221,7 @@ jobs:
echo "Generated release tag: $TAG" echo "Generated release tag: $TAG"
- name: Create GitHub Release - name: Create GitHub Release
uses: softprops/action-gh-release@v1 uses: softprops/action-gh-release@v2
with: with:
tag_name: ${{ steps.tag.outputs.tag }} tag_name: ${{ steps.tag.outputs.tag }}
name: "Archive (Top ${{ env.DOMAIN_COUNT }}) - ${{ steps.tag.outputs.tag }}" name: "Archive (Top ${{ env.DOMAIN_COUNT }}) - ${{ steps.tag.outputs.tag }}"
+15 -14
View File
@@ -14,15 +14,21 @@ This repository hosts a collection of favicon images for the world's most popula
### Access Individual Favicons ### Access Individual Favicons
Individual favicons are stored in the `assets` branch and are named according to their second-level domain: Individual favicons are stored in the `assets` branch and are named according to their domain name:
- `google.png` for google.com - `google.com.png` for google.com
- `github.png` for github.com - `github.com.png` for github.com
Access patterns: Access patterns:
``` ```
https://raw.githubusercontent.com/xixu-me/favicons/assets/DOMAIN_NAME.png https://raw.githubusercontent.com/xixu-me/favicons/refs/heads/assets/favicons/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
``` ```
### Download Compressed Archives ### Download Compressed Archives
@@ -46,7 +52,7 @@ tzst x archive.tzst
Archives are available with the following domain counts: Archives are available with the following domain counts:
- 200 (minimal) - 200
- 500 - 500
- 1,000 - 1,000
- 2,000 - 2,000
@@ -56,8 +62,6 @@ Archives are available with the following domain counts:
- 50,000 - 50,000
- 100,000 - 100,000
- 200,000 - 200,000
- 500,000
- 1,000,000 (complete set)
## Self-Build Instructions ## Self-Build Instructions
@@ -110,15 +114,12 @@ You can modify the run.yml file to change:
### File Naming ### File Naming
Favicons are named based on the second-level domain: Favicons are named using the domain name:
- `example.com` → `example.png` - `example.com` → `example.com.png`
- `subdomain.example.com` → `example.png` - `subdomain.example.com` → `subdomain.example.com.png`
When duplicate second-level domains exist, sequential numbers are added: This ensures unique filenames for all domains and preserves the complete domain information.
- First `github.io` domain → `github.png`
- Second `github.io` domain → `github_1.png`
### Error Handling ### Error Handling