chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 13:30:30 +08:00
commit 914fea506e
2793 changed files with 802106 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
name: Assign Issue
on:
issues:
types: [opened, edited]
jobs:
assign:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.x"
- name: Install Dependencies
run: |
python -m pip install --upgrade PyGithub
- name: Assign Issue
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: python .github/workflows/issue_assigner/assign_issue.py
@@ -0,0 +1,93 @@
"""Assigns the issue based on who created the file mentioned."""
# pylint: disable=line-too-long,too-many-arguments
import base64
import json
import os
import re
from github import Github
def get_issue_number(event_path: str) -> int:
"""Retrieves the issue number from GitHub event data."""
# Load event data
with open(event_path, encoding="utf-8") as f:
event_data = json.load(f)
# Determine the issue number based on the event
if "issue" in event_data:
return int(event_data["issue"]["number"])
raise ValueError("Unable to determine issue number from event data.")
def main() -> None:
"""Gets filename mentioned in issue, finds author username in file, assigns issue to user."""
# Get GitHub token and repository details
repo_name = os.getenv("GITHUB_REPOSITORY", "")
token = os.getenv("GITHUB_TOKEN")
issue_number = get_issue_number(os.getenv("GITHUB_EVENT_PATH", ""))
g = Github(token)
repo = g.get_repo(repo_name)
issue = repo.get_issue(number=issue_number)
# Regex to find any file with an extension
file_match = re.search(r"\b([\w-]+\.[\w]+)\b", issue.body, re.IGNORECASE)
if not file_match:
print("No file found in issue.")
return
file_name = file_match.group(1)
result = g.search_code(f"repo:{repo_name} filename:{file_name}")
if result.totalCount == 0:
result = g.search_code(f"repo:{repo_name} {file_name}")
if result.totalCount == 0:
print(f"No files found for {file_name}")
return
file_path = result[0].path
# Get the commits for the file
commits = repo.get_commits(path=file_path)
# Try to get the author of the first commit
if commits.totalCount > 0:
# The last commit in the list is the first commit
first_commit = commits[commits.totalCount - 1]
if first_commit.author:
username = first_commit.author.login
print(
f"Assigning {username} to Issue #{issue_number} for File {file_path} based on the first commit."
)
issue.add_to_assignees(username)
return
# If the file is a notebook and the first commit author wasn't found,
# check the notebook metadata as a fallback.
if file_name.endswith(".ipynb"):
print(
"Could not determine the first commit author, checking the notebook metadata."
)
file_content_encoded = repo.get_contents(file_path).content
file_content = str(base64.b64decode(file_content_encoded))[:10000]
match = re.search(
r"Author.+https://github\.com/([^/\)]+)", file_content, flags=re.DOTALL
)
if match:
username = match.group(1)
print(
f"Assigning {username} to Issue #{issue_number} for File {file_path} based on notebook metadata."
)
issue.add_to_assignees(username)
return
print(f"No User Found for {file_name}")
if __name__ == "__main__":
main()
+25
View File
@@ -0,0 +1,25 @@
name: Links
on:
repository_dispatch:
workflow_dispatch:
schedule:
- cron: "00 18 * * *"
jobs:
linkChecker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Link Checker
id: lychee
uses: lycheeverse/lychee-action@v2
- name: Create Issue From File
if: env.lychee_exit_code != 0
uses: peter-evans/create-issue-from-file@v5
with:
title: Link Checker Report
content-filepath: ./lychee/out.md
labels: report, automated issue
+66
View File
@@ -0,0 +1,66 @@
#################################
#################################
## Super Linter GitHub Actions ##
#################################
#################################
name: Lint Code Base
#
# Documentation:
# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions
#
#############################
# Start the job on all push #
#############################
on:
pull_request:
branches: [main]
###############
# Set the Job #
###############
jobs:
build:
# Name the Job
name: Lint Code Base
# Set the agent to run on
runs-on: ubuntu-latest
##################
# Load all steps #
##################
steps:
##########################
# Checkout the code base #
##########################
- name: Checkout Code
uses: actions/checkout@v6
with:
# Full git history is needed to get a proper list of changed files within `super-linter`
fetch-depth: 0
################################
# Run Linter against code base #
################################
- name: Lint Code Base
uses: super-linter/super-linter/slim@v7
env:
DEFAULT_BRANCH: main
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
FILTER_REGEX_EXCLUDE: "^(.github/|gemini/sample-apps/finance-advisor-spanner/|gemini/sample-apps/quickbot/).*"
LOG_LEVEL: WARN
SHELLCHECK_OPTS: -e SC1091 -e 2086
VALIDATE_ALL_CODEBASE: false
VALIDATE_PYTHON_PYINK: false
VALIDATE_PYTHON_ISORT: false
VALIDATE_PYTHON_BLACK: false
VALIDATE_CHECKOV: false
VALIDATE_JAVASCRIPT_STANDARD: false
VALIDATE_TYPESCRIPT_STANDARD: false
VALIDATE_JUPYTER_NBQA_FLAKE8: false
VALIDATE_JUPYTER_NBQA_PYLINT: false
VALIDATE_JUPYTER_NBQA_ISORT: false
VALIDATE_JUPYTER_NBQA_MYPY: false
VALIDATE_JUPYTER_NBQA_BLACK: false
VALIDATE_JSCPD: false
+156
View File
@@ -0,0 +1,156 @@
name: Check Spelling
# Comment management is handled through a secondary job, for details see:
# https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Restricted-Permissions
#
# `jobs.comment-push` runs when a push is made to a repository and the `jobs.spelling` job needs to make a comment
# (in odd cases, it might actually run just to collapse a comment, but that's fairly rare)
# it needs `contents: write` in order to add a comment.
#
# `jobs.comment-pr` runs when a pull_request is made to a repository and the `jobs.spelling` job needs to make a comment
# or collapse a comment (in the case where it had previously made a comment and now no longer needs to show a comment)
# it needs `pull-requests: write` in order to manipulate those comments.
# Updating pull request branches is managed via comment handling.
# For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list
#
# These elements work together to make it happen:
#
# `on.issue_comment`
# This event listens to comments by users asking to update the metadata.
#
# `jobs.update`
# This job runs in response to an issue_comment and will push a new commit
# to update the spelling metadata.
#
# `with.experimental_apply_changes_via_bot`
# Tells the action to support and generate messages that enable it
# to make a commit to update the spelling metadata.
#
# `with.ssh_key`
# In order to trigger workflows when the commit is made, you can provide a
# secret (typically, a write-enabled github deploy key).
#
# For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key
# Sarif reporting
#
# Access to Sarif reports is generally restricted (by GitHub) to members of the repository.
#
# Requires enabling `security-events: write`
# and configuring the action with `use_sarif: 1`
#
# For information on the feature, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Sarif-output
# Minimal workflow structure:
#
# on:
# push:
# ...
# pull_request_target:
# ...
# jobs:
# # you only want the spelling job, all others should be omitted
# spelling:
# # remove `security-events: write` and `use_sarif: 1`
# # remove `experimental_apply_changes_via_bot: 1`
# ... otherwise adjust the `with:` as you wish
on:
pull_request:
branches:
- "**"
types:
- "opened"
- "reopened"
- "synchronize"
jobs:
spelling:
name: Check Spelling
permissions:
contents: read
actions: read
security-events: write
outputs:
followup: ${{ steps.spelling.outputs.followup }}
runs-on: ubuntu-latest
if: ${{ contains(github.event_name, 'pull_request') || github.event_name == 'push' }}
concurrency:
group: spelling-${{ github.event.pull_request.number || github.ref }}
# note: If you use only_check_changed_files, you do not want cancel-in-progress
cancel-in-progress: false
steps:
- name: check-spelling
id: spelling
uses: check-spelling/check-spelling@main
with:
suppress_push_for_open_pull_request: ${{ github.actor != 'dependabot[bot]' && 1 }}
checkout: true
check_file_names: 1
spell_check_this: check-spelling/spell-check-this@main
post_comment: 0
use_magic_file: 1
report-timing: 1
warnings: bad-regex,binary-file,deprecated-feature,ignored-expect-variant,large-file,limited-references,no-newline-at-eof,noisy-file,non-alpha-in-dictionary,token-is-substring,unexpected-line-ending,whitespace-in-dictionary,minified-file,unsupported-configuration,no-files-to-check,unclosed-block-ignore-begin,unclosed-block-ignore-end
experimental_apply_changes_via_bot: 1
dictionary_source_prefixes: '{"cspell": "https://raw.githubusercontent.com/streetsidesoftware/cspell-dicts/main/dictionaries/"}'
extra_dictionaries: |
cspell:aws/dict/aws.txt
cspell:bash/samples/bash-words.txt
cspell:companies/dict/companies.txt
cspell:css/dict/css.txt
cspell:data-science/dict/data-science-models.txt
cspell:data-science/dict/data-science.txt
cspell:data-science/dict/data-science-tools.txt
cspell:dart/src/dart.txt
cspell:de_DE/src/German_de_DE.dic
cspell:django/requirements.txt
cspell:django/dict/django.txt
cspell:docker/src/docker-words.txt
cspell:en_shared/dict/acronyms.txt
cspell:en_shared/dict/shared-additional-words.txt
cspell:en_GB/en_GB.trie
cspell:en_US/en_US.trie
cspell:filetypes/src/filetypes.txt
cspell:flutter/src/flutter.txt
cspell:fonts/dict/fonts.txt
cspell:fr_FR/fr-fr.trie
cspell:fullstack/dict/fullstack.txt
cspell:golang/dict/go.txt
cspell:google/dict/google.txt
cspell:html/dict/html.txt
cspell:it_IT/dict/it-it.trie
cspell:java/src/java.txt
cspell:k8s/dict/k8s.txt
cspell:mnemonics/dict/mnemonics.txt
cspell:monkeyc/src/monkeyc_keywords.txt
cspell:node/dict/node.txt
cspell:npm/dict/npm.txt
cspell:people-names/dict/people-names.txt
cspell:php/dict/php.txt
cspell:python/dict/python.txt
cspell:python/dict/python-common.txt
cspell:shell/dict/shell-all-words.txt
cspell:software-terms/dict/softwareTerms.txt
cspell:software-terms/dict/webServices.txt
cspell:sql/src/common-terms.txt
cspell:sql/src/sql.txt
cspell:sql/src/tsql.txt
cspell:svelte/dict/svelte.txt
cspell:terraform/dict/terraform.txt
cspell:typescript/dict/typescript.txt
check_extra_dictionaries:
cspell:cryptocurrencies/dict/cryptocurrencies.txt
cspell:gaming-terms/dict/gaming-terms.txt
cspell:latex/dict/latex.txt
cspell:public-licenses/src/additional-licenses.txt
cspell:public-licenses/src/generated/public-licenses.txt
ignore-pattern: "[^'a-záéíóúñçüA-ZÁÉÍÓÚÑÇÜ]"
upper-pattern: "[A-ZÁÉÍÓÚÑÇÜ]"
lower-pattern: "[a-záéíóúñçü]"
not-lower-pattern: "[^a-záéíóúñçü]"
not-upper-or-lower-pattern: "[^A-ZÁÉÍÓÚÑÇÜa-záéíóúñçü]"
punctuation-pattern: "'"
only_check_changed_files: true
longest_word: "10"