Fix build error

This commit is contained in:
Tindy X
2023-11-07 17:02:47 +08:00
parent 25b25f669d
commit d8075aa701
5 changed files with 91 additions and 71 deletions

View File

@@ -179,7 +179,7 @@ jobs:
tags: tindy2013/subconverter:latest
build-args: |
SHA=${{ steps.vars.outputs.sha_short }}
THREADS=2
THREADS=4
outputs: type=image,push=true
- name: Replace tag without `v`
@@ -200,7 +200,7 @@ jobs:
context: scripts/
tags: tindy2013/subconverter:${{steps.version.outputs.result}}
build-args: |
THREADS=2
THREADS=4
outputs: type=image,push=true
- name: Save digest
@@ -252,7 +252,7 @@ jobs:
tags: tindy2013/subconverter:latest
build-args: |
SHA=${{ steps.vars.outputs.sha_short }}
THREADS=2
THREADS=4
outputs: type=image,push=true
- name: Replace tag without `v`
@@ -273,7 +273,7 @@ jobs:
context: scripts/
tags: tindy2013/subconverter:${{steps.version.outputs.result}}
build-args: |
THREADS=2
THREADS=4
outputs: type=image,push=true
- name: Save digest

View File

@@ -495,6 +495,7 @@ T unwrap_free(JSContext * ctx, JSValue val)
template <class Tuple, std::size_t... I>
Tuple unwrap_args_impl(JSContext * ctx, JSValueConst * argv, std::index_sequence<I...>)
{
(void)ctx;
return Tuple{js_traits<std::decay_t<std::tuple_element_t<I, Tuple>>>::unwrap(ctx, argv[I])...};
}
@@ -1207,12 +1208,12 @@ public:
JSModuleDef * m;
JSContext * ctx;
const char * name;
/*const char * name;*/
using nvp = std::pair<const char *, Value>;
std::vector<nvp> exports;
public:
Module(JSContext * ctx, const char * name) : ctx(ctx), name(name)
Module(JSContext * ctx, const char * name) : ctx(ctx)/*, name(name)*/
{
m = JS_NewCModule(ctx, name, [](JSContext * ctx, JSModuleDef * m) noexcept {
auto& context = Context::get(ctx);

View File

@@ -1,11 +1,12 @@
FROM alpine:3.16
LABEL maintainer "tindy.it@gmail.com"
FROM alpine:3.16 AS builder
LABEL maintainer="tindy.it@gmail.com"
ARG THREADS="4"
ARG SHA=""
# build minimized
WORKDIR /
RUN apk add --no-cache --virtual .build-tools git g++ build-base linux-headers cmake python3 && \
RUN set -xe && \
apk add --no-cache --virtual .build-tools git g++ build-base linux-headers cmake python3 && \
apk add --no-cache --virtual .build-deps curl-dev rapidjson-dev libevent-dev pcre2-dev yaml-cpp-dev && \
git clone https://github.com/ftk/quickjspp --depth=1 && \
cd quickjspp && \
@@ -29,7 +30,7 @@ RUN apk add --no-cache --virtual .build-tools git g++ build-base linux-headers c
install -d /usr/include/date/ && \
install -m644 libcron/externals/date/include/date/* /usr/include/date/ && \
cd .. && \
git clone https://github.com/ToruNiina/toml11 --depth=1 && \
git clone https://github.com/ToruNiina/toml11 --branch="v3.7.1" --depth=1 && \
cd toml11 && \
cmake -DCMAKE_CXX_STANDARD=11 . && \
make install -j $THREADS && \
@@ -41,14 +42,19 @@ RUN apk add --no-cache --virtual .build-tools git g++ build-base linux-headers c
python3 -m pip install gitpython && \
python3 scripts/update_rules.py -c scripts/rules_config.conf && \
cmake -DCMAKE_BUILD_TYPE=Release . && \
make -j $THREADS && \
mv subconverter /usr/bin && \
mv base ../ && \
cd .. && \
rm -rf subconverter quickjspp libcron toml11 /usr/lib/lib*.a /usr/include/* /usr/local/include/lib*.a /usr/local/include/* && \
apk add --no-cache --virtual subconverter-deps pcre2 libcurl yaml-cpp libevent && \
apk del .build-tools .build-deps
make -j $THREADS
# build final image
FROM alpine:3.16
LABEL maintainer="tindy.it@gmail.com"
RUN apk add --no-cache --virtual subconverter-deps pcre2 libcurl yaml-cpp libevent
COPY --from=builder /subconverter/subconverter /usr/bin/
COPY --from=builder /subconverter/base /base/
# set entry
WORKDIR /base
CMD subconverter
EXPOSE 25500/tcp

View File

@@ -13,13 +13,13 @@ cd ..
git clone https://github.com/jbeder/yaml-cpp --depth=1
cd yaml-cpp
cmake -DCMAKE_BUILD_TYPE=Release -DYAML_CPP_BUILD_TESTS=OFF -DYAML_CPP_BUILD_TOOLS=OFF . > /dev/null
make install -j2 > /dev/null
make install -j3 > /dev/null
cd ..
git clone https://github.com/ftk/quickjspp --depth=1
cd quickjspp
cmake -DCMAKE_BUILD_TYPE=Release .
make quickjs -j2
make quickjs -j3 > /dev/null
install -d /usr/lib/quickjs/
install -m644 quickjs/libquickjs.a /usr/lib/quickjs/
install -d /usr/include/quickjs/
@@ -31,10 +31,10 @@ git clone https://github.com/PerMalmberg/libcron --depth=1
cd libcron
git submodule update --init
cmake -DCMAKE_BUILD_TYPE=Release .
make libcron install -j2
make libcron install -j3
cd ..
git clone https://github.com/ToruNiina/toml11 --depth=1
git clone https://github.com/ToruNiina/toml11 --branch="v3.7.1" --depth=1
cd toml11
cmake -DCMAKE_CXX_STANDARD=11 .
make install -j4
@@ -42,8 +42,9 @@ cd ..
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
cmake -DCMAKE_BUILD_TYPE=Release .
make -j2
make -j3
rm subconverter
# shellcheck disable=SC2046
g++ -o base/subconverter $(find CMakeFiles/subconverter.dir/src/ -name "*.o") -static -lpcre2-8 -levent -lyaml-cpp -L/usr/lib64 -lcurl -lmbedtls -lmbedcrypto -lmbedx509 -lz -l:quickjs/libquickjs.a -llibcron -O3 -s
python3 -m ensurepip

View File

@@ -1,66 +1,78 @@
import configparser, shutil, glob, os, random, string
import stat, logging, argparse
from git import InvalidGitRepositoryError, repo as GitRepo
import argparse
import configparser
import glob
import logging
import os
import shutil
import stat
from git import InvalidGitRepositoryError, Repo
def del_rw(action, name: str, exc):
os.chmod(name, stat.S_IWRITE)
os.remove(name)
def open_repo(path: str):
if os.path.exists(repo_path) == False: return None
if not os.path.exists(path):
return None
try:
return GitRepo.Repo(path)
return Repo(path)
except InvalidGitRepositoryError:
return None
parser = argparse.ArgumentParser()
parser.add_argument("-c", "--config", default="rules_config.conf")
args = parser.parse_args()
config = configparser.ConfigParser()
config.read(args.config)
logging.basicConfig(format="%(asctime)s %(message)s", level=logging.DEBUG)
for section in config.sections():
repo = config.get(section, "name", fallback=section)
url = config.get(section, "url")
commit = config.get(section, "checkout")
matches = config.get(section, "match").split("|")
save_path = config.get(section, "dest", fallback="base/rules/{}".format(repo))
keep_tree = config.getboolean(section, "keep_tree", fallback=True)
logging.info("reading files from url {} with commit {} and matches {}, save to {} keep_tree {}".format(url, commit, matches, save_path, keep_tree))
# ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 16))
repo_path = os.path.join("./tmp/repo/", repo)
r = open_repo(repo_path)
if r != None:
logging.info("repo {} exists, checking out...".format(repo_path))
r.git.checkout(commit)
else:
logging.info("repo {} not exist, cloning...".format(repo_path))
shutil.rmtree(repo_path, ignore_errors=True)
os.makedirs(repo_path, exist_ok=True)
r = GitRepo.Repo.clone_from(url, repo_path)
r.git.checkout(commit)
def update_rules(repo_path, save_path, commit, matches, keep_tree):
os.makedirs(save_path, exist_ok=True)
for pattern in matches:
files = glob.glob("{}/{}".format(repo_path, pattern), recursive=True)
files = glob.glob(os.path.join(repo_path, pattern), recursive=True)
for file in files:
if os.path.isdir(file): continue
(file_rel_path, file_name) = os.path.split(file.removeprefix(repo_path))
if os.path.isdir(file):
continue
file_rel_path, file_name = os.path.split(os.path.relpath(file, repo_path))
if keep_tree:
file_dest_dir = "{}{}".format(save_path, file_rel_path)
file_dest_path = "{}/{}".format(file_dest_dir, file_name)
file_dest_dir = os.path.join(save_path, file_rel_path)
os.makedirs(file_dest_dir, exist_ok=True)
file_dest_path = os.path.join(file_dest_dir, file_name)
else:
file_dest_path = "{}{}".format(save_path, file_name)
file_dest_path = os.path.join(save_path, file_name)
shutil.copy2(file, file_dest_path)
logging.info(f"copied {file} to {file_dest_path}")
shutil.copyfile(file, file_dest_path)
logging.info("copied {} to {}".format(file, file_dest_path))
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-c", "--config", default="rules_config.conf")
args = parser.parse_args()
shutil.rmtree("./tmp", onerror=del_rw)
config = configparser.ConfigParser()
config.read(args.config)
logging.basicConfig(format="%(asctime)s %(message)s", level=logging.DEBUG)
for section in config.sections():
repo = config.get(section, "name", fallback=section)
url = config.get(section, "url")
commit = config.get(section, "checkout")
matches = config.get(section, "match").split("|")
save_path = config.get(section, "dest", fallback=f"base/rules/{repo}")
keep_tree = config.getboolean(section, "keep_tree", fallback=True)
logging.info(f"reading files from url {url} with commit {commit} and matches {matches}, save to {save_path} keep_tree {keep_tree}")
repo_path = os.path.join("./tmp/repo/", repo)
r = open_repo(repo_path)
if r is None:
logging.info(f"cloning {url} to {repo_path}")
r = Repo.clone_from(url, repo_path)
else:
logging.info(f"pulling changes for {repo} from {url}")
r.remotes.origin.pull()
r.git.checkout(commit)
update_rules(repo_path, save_path, commit, matches, keep_tree)
shutil.rmtree("./tmp", ignore_errors=True)
if __name__ == "__main__":
main()