initial commit
This commit is contained in:
233
.gitignore
vendored
Normal file
233
.gitignore
vendored
Normal file
@@ -0,0 +1,233 @@
|
||||
# ---> Python
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
cover/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
db.sqlite3-journal
|
||||
|
||||
# Flask stuff:
|
||||
instance/
|
||||
.webassets-cache
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
.pybuilder/
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# IPython
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
# For a library or package, you might want to ignore these files since the code is
|
||||
# intended to run in multiple environments; otherwise, check them in:
|
||||
# .python-version
|
||||
|
||||
# pipenv
|
||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||
# install all needed dependencies.
|
||||
#Pipfile.lock
|
||||
|
||||
# poetry
|
||||
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
||||
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||
# commonly ignored for libraries.
|
||||
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
||||
#poetry.lock
|
||||
|
||||
# pdm
|
||||
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
||||
#pdm.lock
|
||||
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
||||
# in version control.
|
||||
# https://pdm.fming.dev/#use-with-ide
|
||||
.pdm.toml
|
||||
|
||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
||||
__pypackages__/
|
||||
|
||||
# Celery stuff
|
||||
celerybeat-schedule
|
||||
celerybeat.pid
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
# pytype static type analyzer
|
||||
.pytype/
|
||||
|
||||
# Cython debug symbols
|
||||
cython_debug/
|
||||
|
||||
# PyCharm
|
||||
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
||||
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||
#.idea/
|
||||
|
||||
# ---> Qt
|
||||
# C++ objects and libs
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.a
|
||||
*.la
|
||||
*.lai
|
||||
*.so
|
||||
*.so.*
|
||||
*.dll
|
||||
*.dylib
|
||||
|
||||
# Qt-es
|
||||
object_script.*.Release
|
||||
object_script.*.Debug
|
||||
*_plugin_import.cpp
|
||||
/.qmake.cache
|
||||
/.qmake.stash
|
||||
*.pro.user
|
||||
*.pro.user.*
|
||||
*.qbs.user
|
||||
*.qbs.user.*
|
||||
*.moc
|
||||
moc_*.cpp
|
||||
moc_*.h
|
||||
qrc_*.cpp
|
||||
ui_*.h
|
||||
*.qmlc
|
||||
*.jsc
|
||||
Makefile*
|
||||
*build-*
|
||||
*.qm
|
||||
*.prl
|
||||
|
||||
# Qt unit tests
|
||||
target_wrapper.*
|
||||
|
||||
# QtCreator
|
||||
*.autosave
|
||||
|
||||
# QtCreator Qml
|
||||
*.qmlproject.user
|
||||
*.qmlproject.user.*
|
||||
|
||||
# QtCreator CMake
|
||||
CMakeLists.txt.user*
|
||||
|
||||
# QtCreator 4.8< compilation database
|
||||
compile_commands.json
|
||||
|
||||
# QtCreator local machine specific files for imported projects
|
||||
*creator.user*
|
||||
|
||||
*_qmlcache.qrc
|
||||
|
||||
|
||||
.history
|
||||
depend
|
||||
output/output/LOGtoJSON.exe
|
||||
|
||||
.pytest_cache
|
||||
output
|
||||
docs/
|
||||
config.yaml
|
||||
**/tempCodeRunnerFile.py
|
||||
|
||||
.history
|
||||
.venv
|
||||
venv
|
||||
*.log
|
||||
1
.python-version
Normal file
1
.python-version
Normal file
@@ -0,0 +1 @@
|
||||
3.13
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 WorldTeacher
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
6
main.py
Normal file
6
main.py
Normal file
@@ -0,0 +1,6 @@
|
||||
def main():
|
||||
print("Hello from komsuite-web!")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
1
packages/KomCache
Submodule
1
packages/KomCache
Submodule
Submodule packages/KomCache added at 4e0a19c973
1
packages/KomConfig
Submodule
1
packages/KomConfig
Submodule
Submodule packages/KomConfig added at 674e9f9fd5
1
packages/KomGrabber
Submodule
1
packages/KomGrabber
Submodule
Submodule packages/KomGrabber added at 4d0d412d38
1
packages/KomPage
Submodule
1
packages/KomPage
Submodule
Submodule packages/KomPage added at 4ae996bfd6
0
packages/KomSearcher/README.md
Normal file
0
packages/KomSearcher/README.md
Normal file
53
packages/KomSearcher/background.js
Normal file
53
packages/KomSearcher/background.js
Normal file
@@ -0,0 +1,53 @@
|
||||
// This is the background script for the extension
|
||||
console.log('Background script running');
|
||||
|
||||
// Listen for messages from the content script
|
||||
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
|
||||
if (message.action === 'search') {
|
||||
const query = message.query;
|
||||
const apiUrl = `http://127.0.0.1:5001/api/search?q=${encodeURIComponent(query)}`; // Add the http:// protocol to the URL
|
||||
|
||||
console.log(`Searching for: ${query}`);
|
||||
fetch(apiUrl)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
const results = data.results || [];
|
||||
console.log('Search results:', results);
|
||||
sendResponse({ results });
|
||||
|
||||
// Send the results to the popup
|
||||
chrome.runtime.sendMessage({ action: 'displayResults', results });
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error fetching search results:', error);
|
||||
sendResponse({ results: [] });
|
||||
});
|
||||
|
||||
// Return true to indicate that the response will be sent asynchronously
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
// Periodically check the active tab's URL every 0.5 seconds
|
||||
setInterval(() => {
|
||||
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
|
||||
if (tabs.length > 0) {
|
||||
const activeTab = tabs[0];
|
||||
const url = new URL(activeTab.url);
|
||||
const hostname = url.hostname;
|
||||
|
||||
// List of supported sites
|
||||
const supportedSites = [
|
||||
'mangadex.org',
|
||||
'anilist.co',
|
||||
'kitsu.app',
|
||||
'myanimelist.net'
|
||||
];
|
||||
|
||||
if (supportedSites.includes(hostname)) {
|
||||
console.log(`Sending addLens message to content script for hostname: ${hostname}`);
|
||||
chrome.tabs.sendMessage(activeTab.id, { action: 'addLens', hostname });
|
||||
}
|
||||
}
|
||||
});
|
||||
}, 500);
|
||||
84
packages/KomSearcher/content.js
Normal file
84
packages/KomSearcher/content.js
Normal file
@@ -0,0 +1,84 @@
|
||||
// Detect the active site and add a magnifying lens in the appropriate location
|
||||
const siteHandlers = {
|
||||
'mangadex.org': () => {
|
||||
const headers = document.querySelectorAll('div.title p.mb-1'); // Select the text inside p.mb-1 within div.title
|
||||
headers.forEach(header => addLens(header));
|
||||
},
|
||||
'anilist.co': () => {
|
||||
const headers = document.querySelectorAll('.header-title');
|
||||
headers.forEach(header => addLens(header));
|
||||
},
|
||||
'kitsu.app': () => {
|
||||
const headers = document.querySelectorAll('section.media--title h3'); // Select the text inside h3 within section.media--title
|
||||
headers.forEach(header => addLens(header));
|
||||
},
|
||||
'myanimelist.net': () => {
|
||||
const headers = document.querySelectorAll('.title-name');
|
||||
headers.forEach(header => addLens(header));
|
||||
}
|
||||
};
|
||||
|
||||
function addLens(header) {
|
||||
// Check if the lens is already present
|
||||
if (header.querySelector('span.lens-icon')) {
|
||||
return; // Exit if the lens is already added
|
||||
}
|
||||
|
||||
const lens = document.createElement('span');
|
||||
lens.textContent = '🔍';
|
||||
lens.className = 'lens-icon'; // Add a class to identify the lens
|
||||
lens.style.cursor = 'pointer';
|
||||
lens.style.marginLeft = '10px';
|
||||
lens.title = 'Search for this title?'; // Add a tooltip to the lens
|
||||
lens.addEventListener('click', () => {
|
||||
const query = header.textContent.trim().replace('🔍', '').trim(); // Remove the lens icon from the query
|
||||
console.log(`Searching for title: ${query}`);
|
||||
chrome.runtime.sendMessage({ action: 'search', query }, (response) => {
|
||||
if (response && response.results) {
|
||||
displayResults(response.results);
|
||||
}
|
||||
});
|
||||
});
|
||||
header.appendChild(lens);
|
||||
}
|
||||
|
||||
function displayResults(results) {
|
||||
const resultWindow = document.createElement('div');
|
||||
resultWindow.style.position = 'fixed';
|
||||
resultWindow.style.top = '10px';
|
||||
resultWindow.style.right = '10px';
|
||||
resultWindow.style.backgroundColor = 'white';
|
||||
resultWindow.style.border = '1px solid black';
|
||||
resultWindow.style.padding = '10px';
|
||||
resultWindow.style.zIndex = '10000';
|
||||
resultWindow.style.maxHeight = '400px';
|
||||
resultWindow.style.overflowY = 'auto'; // Make the result window scrollable
|
||||
|
||||
// Ensure results are displayed as titles
|
||||
resultWindow.innerHTML = results.map(r => `<p>${r.title || 'No title available'}</p>`).join('');
|
||||
|
||||
// Remove any existing result window before appending a new one
|
||||
const existingWindow = document.querySelector('.result-window');
|
||||
if (existingWindow) {
|
||||
existingWindow.remove();
|
||||
}
|
||||
|
||||
resultWindow.className = 'result-window';
|
||||
document.body.appendChild(resultWindow);
|
||||
}
|
||||
|
||||
// Execute the handler for the current site immediately on page load
|
||||
const hostname = window.location.hostname;
|
||||
if (siteHandlers[hostname]) {
|
||||
siteHandlers[hostname]();
|
||||
}
|
||||
|
||||
// Listen for messages from the background script
|
||||
chrome.runtime.onMessage.addListener((message) => {
|
||||
if (message.action === 'addLens') {
|
||||
const hostname = message.hostname;
|
||||
if (siteHandlers[hostname]) {
|
||||
siteHandlers[hostname]();
|
||||
}
|
||||
}
|
||||
});
|
||||
0
packages/KomSearcher/icon.png
Normal file
0
packages/KomSearcher/icon.png
Normal file
25
packages/KomSearcher/manifest.json
Normal file
25
packages/KomSearcher/manifest.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "KomSearcher",
|
||||
"version": "1.0",
|
||||
"description": "A Firefox extension used to request manga from various sites.",
|
||||
"permissions": ["activeTab", "tabs"],
|
||||
"background": {
|
||||
"scripts": ["background.js"]
|
||||
},
|
||||
"browser_action": {
|
||||
"default_icon": "icon.png",
|
||||
"default_title": "KomSearcher"
|
||||
},
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": [
|
||||
"https://mangadex.org/*",
|
||||
"https://anilist.co/*",
|
||||
"https://kitsu.app/*",
|
||||
"https://myanimelist.net/*"
|
||||
],
|
||||
"js": ["content.js"]
|
||||
}
|
||||
]
|
||||
}
|
||||
62
packages/KomSearcher/popup.html
Normal file
62
packages/KomSearcher/popup.html
Normal file
@@ -0,0 +1,62 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Search Results</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
padding: 10px;
|
||||
max-height: 400px;
|
||||
overflow-y: auto; /* Make the popup scrollable */
|
||||
}
|
||||
.result {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Search Results</h1>
|
||||
<div id="results"></div>
|
||||
<script>
|
||||
// Helper function to calculate similarity between two strings
|
||||
function calculateSimilarity(searchTitle, resultTitle) {
|
||||
const searchWords = searchTitle.toLowerCase().split(/\s+/);
|
||||
const resultWords = resultTitle.toLowerCase().split(/\s+/);
|
||||
const commonWords = searchWords.filter(word => resultWords.includes(word));
|
||||
return (commonWords.length / Math.max(searchWords.length, resultWords.length)) * 100;
|
||||
}
|
||||
|
||||
// This script will populate the results dynamically
|
||||
chrome.runtime.onMessage.addListener((message) => {
|
||||
if (message.action === 'displayResults' && message.results) {
|
||||
const resultsDiv = document.getElementById('results');
|
||||
const searchTitle = message.searchTitle || '';
|
||||
|
||||
// Sort results by similarity
|
||||
const sortedResults = message.results.map(result => {
|
||||
const similarity = calculateSimilarity(searchTitle, result.title || '');
|
||||
return { ...result, similarity };
|
||||
}).sort((a, b) => b.similarity - a.similarity);
|
||||
|
||||
// Render results
|
||||
resultsDiv.innerHTML = sortedResults.map(result => {
|
||||
const similarity = result.similarity.toFixed(2);
|
||||
return `
|
||||
<div class='result'>
|
||||
<div style="position: relative;">
|
||||
<span style="position: absolute; top: 0; left: 0; background: #007bff; color: white; padding: 2px 5px; border-radius: 3px; font-size: 12px;">${similarity}%</span>
|
||||
</div>
|
||||
<h3>${result.title || 'No title available'}</h3>
|
||||
<p>Filetypes: ${result.filetypes || 'Unknown'}</p>
|
||||
<p>Size: ${result.size || 'Unknown'}</p>
|
||||
<span style="background: #28a745; color: white; padding: 2px 5px; border-radius: 3px; font-size: 12px;">Volumes: ${result.volumes || 0}</span>
|
||||
</div>
|
||||
`;
|
||||
}).join('');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
1
packages/KomSuite-NyaaPy
Submodule
1
packages/KomSuite-NyaaPy
Submodule
Submodule packages/KomSuite-NyaaPy added at d29938bcf5
1
packages/KomTagger
Submodule
1
packages/KomTagger
Submodule
Submodule packages/KomTagger added at 7574239cdb
0
packages/KomTaggerTui/README.md
Normal file
0
packages/KomTaggerTui/README.md
Normal file
19
packages/KomTaggerTui/pyproject.toml
Normal file
19
packages/KomTaggerTui/pyproject.toml
Normal file
@@ -0,0 +1,19 @@
|
||||
[project]
|
||||
name = "komtaggertui"
|
||||
version = "0.1.0"
|
||||
description = "Add your description here"
|
||||
readme = "README.md"
|
||||
authors = [
|
||||
{ name = "WorldTeacher", email = "coding_contact@pm.me" }
|
||||
]
|
||||
requires-python = ">=3.13"
|
||||
dependencies = [
|
||||
"komtagger",
|
||||
]
|
||||
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[tool.uv.sources]
|
||||
komtagger = { workspace = true }
|
||||
2
packages/KomTaggerTui/src/komtaggertui/__init__.py
Normal file
2
packages/KomTaggerTui/src/komtaggertui/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
def hello() -> str:
|
||||
return "Hello from komtaggertui!"
|
||||
3
packages/KomTaggerTui/src/komtaggertui/app.py
Normal file
3
packages/KomTaggerTui/src/komtaggertui/app.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from textual.content import Content
|
||||
from rich.console import RenderableType
|
||||
from
|
||||
0
packages/KomTaggerTui/src/komtaggertui/py.typed
Normal file
0
packages/KomTaggerTui/src/komtaggertui/py.typed
Normal file
1
packages/anilistAPI
Submodule
1
packages/anilistAPI
Submodule
Submodule packages/anilistAPI added at abf482a7b6
1
packages/autograbber
Submodule
1
packages/autograbber
Submodule
Submodule packages/autograbber added at c0b4a8d90f
1
packages/comicvineAPI
Submodule
1
packages/comicvineAPI
Submodule
Submodule packages/comicvineAPI added at d85576d949
1
packages/komgAPI
Submodule
1
packages/komgAPI
Submodule
Submodule packages/komgAPI added at 1877905473
34
packages/mangadexAPI/.gitea/ISSUE_TEMPLATE/bug.yml
Normal file
34
packages/mangadexAPI/.gitea/ISSUE_TEMPLATE/bug.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
name: Bug Report
|
||||
description: Report a bug in this project
|
||||
labels:
|
||||
- kind/bug
|
||||
- triage
|
||||
body:
|
||||
|
||||
- type: textarea
|
||||
id: bug
|
||||
attributes:
|
||||
label: Describe the bug
|
||||
description: |
|
||||
A clear and concise description of what the bug is.
|
||||
What did you expect to happen? What happened instead?
|
||||
Include screenshots if applicable.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: reproduction
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: |
|
||||
A clear and concise description of how to reproduce the bug.
|
||||
Include steps, code snippets, or screenshots if applicable.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: additional-info
|
||||
attributes:
|
||||
label: Additional information
|
||||
description: |
|
||||
Add any other context or screenshots about the bug here.
|
||||
|
||||
|
||||
23
packages/mangadexAPI/.gitea/ISSUE_TEMPLATE/feature.yml
Normal file
23
packages/mangadexAPI/.gitea/ISSUE_TEMPLATE/feature.yml
Normal file
@@ -0,0 +1,23 @@
|
||||
name: Feature request
|
||||
description: Suggest an idea for this project
|
||||
labels:
|
||||
- kind/feature
|
||||
- triage
|
||||
|
||||
body:
|
||||
- type: textarea
|
||||
id: feature
|
||||
attributes:
|
||||
label: Describe the feature
|
||||
description: |
|
||||
A clear and concise description of what the feature is.
|
||||
What is the problem it solves? What are you trying to accomplish?
|
||||
Include screenshots if applicable.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: additional-info
|
||||
attributes:
|
||||
label: Additional information
|
||||
description: |
|
||||
Add any other context or screenshots about the feature request here.
|
||||
88
packages/mangadexAPI/.gitea/workflows/build.yml
Normal file
88
packages/mangadexAPI/.gitea/workflows/build.yml
Normal file
@@ -0,0 +1,88 @@
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
release_notes:
|
||||
description: Release notes (use \n for newlines)
|
||||
type: string
|
||||
required: false
|
||||
github_release:
|
||||
description: 'Create Gitea Release'
|
||||
default: true
|
||||
type: boolean
|
||||
bump:
|
||||
description: 'Bump type'
|
||||
required: true
|
||||
default: 'patch'
|
||||
type: choice
|
||||
options:
|
||||
- 'major'
|
||||
- 'minor'
|
||||
- 'patch'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@master
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v5
|
||||
- name: Set up Python
|
||||
run: uv python install
|
||||
- name: Set Git identity
|
||||
run: |
|
||||
git config user.name "Gitea CI"
|
||||
git config user.email "ci@git.theprivateserver.de"
|
||||
- name: Bump version
|
||||
id: bump
|
||||
run: |
|
||||
uv tool install bump-my-version
|
||||
uv tool run bump-my-version bump ${{ github.event.inputs.bump }}
|
||||
# echo the version to github env, the version is shown by using uv tool run bump-my-version show current_version
|
||||
echo "VERSION<<EOF" >> $GITHUB_ENV
|
||||
echo "$(uv tool run bump-my-version show current_version)" >> $GITHUB_ENV
|
||||
echo "EOF" >> $GITHUB_ENV
|
||||
- name: Push changes
|
||||
uses: ad-m/github-push-action@master
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
branch: ${{ github.ref }}
|
||||
|
||||
- name: Add release notes to environment
|
||||
id: add_release_notes
|
||||
run: |
|
||||
echo "RELEASE_NOTES<<EOF" >> $GITHUB_ENV
|
||||
echo "${{ github.event.inputs.release_notes }}" >> $GITHUB_ENV
|
||||
echo "EOF" >> $GITHUB_ENV
|
||||
- name: Build package
|
||||
run: uv build
|
||||
- name: Publish package
|
||||
env:
|
||||
USERNAME: ${{ github.repository_owner }}
|
||||
run: uv publish --publish-url https://git.theprivateserver.de/api/packages/$USERNAME/pypi/ -t ${{ secrets.TOKEN }}
|
||||
- name: Generate changelog
|
||||
id: changelog
|
||||
uses: metcalfc/changelog-generator@v4.6.2
|
||||
with:
|
||||
myToken: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Get the changelog
|
||||
run: |
|
||||
cat << "EOF"
|
||||
${{ steps.changelog.outputs.changelog }}
|
||||
EOF
|
||||
|
||||
- name: Create release
|
||||
id: create_release
|
||||
if: ${{ github.event.inputs.github_release == 'true' }}
|
||||
uses: softprops/action-gh-release@master
|
||||
with:
|
||||
tag_name: ${{ env.VERSION }}
|
||||
release_name: Release ${{ env.VERSION }}
|
||||
body: ${{ steps.changelog.outputs.changelog }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
make_latest: true
|
||||
files: |
|
||||
dist/*
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.TOKEN }}
|
||||
0
packages/mangadexAPI/README.md
Normal file
0
packages/mangadexAPI/README.md
Normal file
14
packages/mangadexAPI/pyproject.toml
Normal file
14
packages/mangadexAPI/pyproject.toml
Normal file
@@ -0,0 +1,14 @@
|
||||
[project]
|
||||
name = "mangadexapi"
|
||||
version = "0.1.0"
|
||||
description = "Add your description here"
|
||||
readme = "README.md"
|
||||
authors = [
|
||||
{ name = "WorldTeacher", email = "coding_contact@pm.me" }
|
||||
]
|
||||
requires-python = ">=3.13"
|
||||
dependencies = []
|
||||
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
2
packages/mangadexAPI/src/mangadexapi/__init__.py
Normal file
2
packages/mangadexAPI/src/mangadexapi/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
def hello() -> str:
|
||||
return "Hello from mangadexapi!"
|
||||
0
packages/mangadexAPI/src/mangadexapi/py.typed
Normal file
0
packages/mangadexAPI/src/mangadexapi/py.typed
Normal file
7
pyproject.toml
Normal file
7
pyproject.toml
Normal file
@@ -0,0 +1,7 @@
|
||||
[project]
|
||||
name = "komsuite-web"
|
||||
version = "0.1.0"
|
||||
description = "Add your description here"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.13"
|
||||
dependencies = []
|
||||
Reference in New Issue
Block a user