diff --git a/README.md b/README.md
index 8f7e896..13c2e72 100644
--- a/README.md
+++ b/README.md
@@ -136,6 +136,7 @@ You can use any of the following methods to build.
| [TELEGRAM_BOT_TOKEN](#telegram-support) | APKs Sender for Telegram upload | None |
| [TELEGRAM_API_ID](#telegram-support) | Used for telegram Authentication | None |
| [TELEGRAM_API_HASH](#telegram-support) | Used for telegram Authentication | None |
+| [EXTRA_FILES](#extra-files) | Extra files apk to upload in GitHub upload. | None |
`*` - Can be overridden for individual app.
### App Level Config
@@ -282,7 +283,16 @@ You can use any of the following methods to build.
*Note* -
1. Possible values are: `armeabi-v7a`,`x86`,`x86_64`,`arm64-v8a`
2. Make sure the patching resource(CLI) support this feature.
-10. If you want to exclude any patch. Set comma separated patch in `.env` file
+10. If you want to include any extra file to the Github upload. Set comma arguments
+ in `.env` file or in `ENVS` in `GitHub secrets` (Recommended) in the format
+ ```ini
+ EXTRA_FILES=@.apk
+ ```
+ Example:
+ ```dotenv
+ EXTRA_FILES=https://github.com/inotia00/mMicroG/releases/latest@mmicrog.apk,https://github.com/revanced/revanced-integrations@integrations.apk
+ ```
+11. If you want to exclude any patch. Set comma separated patch in `.env` file
or in `ENVS` in `GitHub secrets` (Recommended) in the format
```ini
_EXCLUDE_PATCH=
@@ -296,7 +306,7 @@ You can use any of the following methods to build.
1. **All** the patches for an app are **included** by default.
2. Revanced patches are provided as space separated, make sure you type those **-** separated here.
It means a patch named _**Hey There**_ must be entered as **_hey-there_** in the above example.
-11. If you want to include any universal patch. Set comma separated patch in `.env`
+12. If you want to include any universal patch. Set comma separated patch in `.env`
file or in `ENVS` in `GitHub secrets` (Recommended) in the format
```ini
_INCLUDE_PATCH=
@@ -308,7 +318,7 @@ You can use any of the following methods to build.
Note -
1. Revanced patches are provided as space separated, make sure you type those **-** separated here.
It means a patch named _**Hey There**_ must be entered as **_hey-there_** in the above example.
-12. If you want to build a specific version or latest version. Add `version` in `.env` file
+13. If you want to build a specific version or latest version. Add `version` in `.env` file
or in `ENVS` in `GitHub secrets` (Recommended) in the format
```ini
_VERSION=
@@ -319,7 +329,7 @@ You can use any of the following methods to build.
YOUTUBE_MUSIC_VERSION=X.X.X
TWITTER_VERSION=latest
```
-13. For Telegram Upload.
+14. For Telegram Upload.
1. Set up a telegram channel, send a message to it and forward the message to
this telegram [bot](https://t.me/username_to_id_bot)
2. Copy `id` and save it to `TELEGRAM_CHAT_ID`
@@ -333,12 +343,12 @@ You can use any of the following methods to build.

6. After Everything done successfully a part of the actions secrets of the repository may look like
-14. Configuration defined in `ENVS` in `GitHub secrets` will override the configuration in `.env` file. You can use this
+15. Configuration defined in `ENVS` in `GitHub secrets` will override the configuration in `.env` file. You can use this
fact to define your normal configurations in `.env` file and sometimes if you want to build something different just
once. Add it in `GitHub secrets`.
-15. Sample Envs
+16. Sample Envs
-16. Make sure your Action has write access. If not click
+17. Make sure your Action has write access. If not click
[here](https://github.com/nikhilbadyal/docker-py-revanced/settings/actions).
In the bottom give read and write access to Actions.
diff --git a/main.py b/main.py
index dfe9594..2c296f4 100644
--- a/main.py
+++ b/main.py
@@ -8,7 +8,7 @@ from src.config import RevancedConfig
from src.downloader.factory import DownloaderFactory
from src.parser import Parser
from src.patches import Patches
-from src.utils import AppNotFound, PatchesJsonFailed, check_java
+from src.utils import AppNotFound, PatchesJsonFailed, check_java, extra_downloads
def main() -> None:
@@ -17,6 +17,7 @@ def main() -> None:
env = Env()
config = RevancedConfig(env)
+ extra_downloads(config)
check_java(config.dry_run)
logger.info(f"Will Patch only {config.apps}")
diff --git a/src/app.py b/src/app.py
index 57cf053..83a4f81 100644
--- a/src/app.py
+++ b/src/app.py
@@ -54,7 +54,9 @@ class APP(object):
return ", ".join([f"{key}: {value}" for key, value in attrs.items()])
@staticmethod
- def download(url: str, config: RevancedConfig, assets_filter: str) -> str:
+ def download(
+ url: str, config: RevancedConfig, assets_filter: str, file_name: str = ""
+ ) -> str:
"""Downloader."""
from src.downloader.download import Downloader
@@ -63,8 +65,9 @@ class APP(object):
from src.downloader.github import Github
url = Github.patch_resource(url, assets_filter)[0]
- extension = pathlib.Path(url).suffix
- file_name = APP.generate_filename(url) + extension
+ if not file_name:
+ extension = pathlib.Path(url).suffix
+ file_name = APP.generate_filename(url) + extension
Downloader(None, config).direct_download(url, file_name) # type: ignore
return file_name
diff --git a/src/config.py b/src/config.py
index 99aca6f..c0b07f3 100644
--- a/src/config.py
+++ b/src/config.py
@@ -5,8 +5,6 @@ from typing import List
from environs import Env
from requests import Session
-from src.utils import default_build
-
default_cli = "https://github.com/revanced/revanced-cli/releases/latest"
default_patches = "https://github.com/revanced/revanced-patches/releases/latest"
default_patches_json = default_patches
@@ -19,6 +17,8 @@ class RevancedConfig(object):
"""Revanced Configurations."""
def __init__(self, env: Env) -> None:
+ from src.utils import default_build
+
self.env = env
self.temp_folder = Path("apks")
self.session = Session()
@@ -89,3 +89,4 @@ class RevancedConfig(object):
"GLOBAL_KEYSTORE_FILE_NAME", "revanced.keystore"
)
self.global_archs_to_build = env.list("GLOBAL_ARCHS_TO_BUILD", [])
+ self.extra_download_files: List[str] = env.list("EXTRA_FILES", [])
diff --git a/src/utils.py b/src/utils.py
index dcad32f..6a1cf7c 100644
--- a/src/utils.py
+++ b/src/utils.py
@@ -1,4 +1,5 @@
"""Utilities."""
+import os
import re
import subprocess
from typing import Dict
@@ -6,6 +7,8 @@ from typing import Dict
from loguru import logger
from requests import Response
+from src.config import RevancedConfig
+
default_build = [
"youtube",
"youtube_music",
@@ -97,3 +100,23 @@ def check_java(dry_run: bool) -> None:
except subprocess.CalledProcessError:
logger.debug("Java>= 17 Must be installed")
exit(-1)
+
+
+def extra_downloads(config: RevancedConfig) -> None:
+ """Download extra files."""
+ from src.app import APP
+
+ try:
+ for extra in config.extra_download_files:
+ url, file_name = extra.split("@")
+ file_name_without_extension, file_extension = os.path.splitext(file_name)
+
+ if file_extension.lower() == ".apk":
+ new_file_name = f"{file_name_without_extension}-output{file_extension}"
+ else:
+ raise ValueError("Only .apk extensions are allowed.")
+ APP.download(url, config, assets_filter="", file_name=new_file_name)
+ except ValueError:
+ logger.info(
+ "Unable to download extra file. Provide input in url@name.apk format."
+ )