diff --git a/.gitea/workflows/loxide.yml b/.gitea/workflows/loxide.yml new file mode 100644 index 0000000..ca7e614 --- /dev/null +++ b/.gitea/workflows/loxide.yml @@ -0,0 +1,50 @@ +name: Build EXE and Release +run-name: ${{ gitea.actor }} +on: + push: + branches: + - master + +jobs: + Build and Release: + runs-on: debian-stable + env: + DISPLAY: :99 + + steps: + - name: Install Prerequisites + run: | + dpkg --add-architecture i386 + apt update > /dev/null 2>&1 + apt install git curl wine32:i386 xvfb -y > /dev/null 2>&1 + + - name: Start X Virtual Framebuffer (Xvfb) + run: | + # Start Xvfb in the background using the defined display number + Xvfb :99 -screen 0 1024x768x16 & + + - name: Cloning Repository + run: | + git clone https://brotoskyj:${{ secrets.RUNNER_TOKEN }}@git.racooncity.org/brotoskyj/AirlockTools --branch RustImplementation + pwd + ls + + - name: Setting Up Build Environment + run: | + apt install wine64 -y -qq > /dev/null 2>&1 + curl -L -o python.exe https://www.python.org/ftp/python/3.13.9/python-3.13.9-amd64.exe + wine python.exe /quiet /NoWeb InstallAllUsers=1 PrependPath=1 TargetDir=C:/Python313 + cp -r AirlockTools/ ~/.wine/drive_c/Python313/ + cd ~/.wine/drive_c/Python313 + wine python.exe -m pip install nuitka pywin32 keyring --break-system-packages + wine python.exe -m pip install -r AirlockTools/requirements.txt + wine python.exe -m pip install \ + --index-url https://git.racooncity.org/api/packages/brotoskyj/pypi/simple/ \ + airlock-libs --break-system-packages + + - name: Build Executable + env: + DISPLAY: :99 + WINEDEBUG: -all + run: | + xvfb-run -a wine cmd /c nuitka --onefile --onefile-windows-splash-screen-image=AirlockTools/loading.png --follow-imports --include-module=keyring.backends.Windows --include-module=win32cred --include-module=pywintypes --include-module=pythoncom --include-module=win32api --include-module=win32security --include-module=win32con --windows-product-name='LoXide' --windows-product-version='1.2.10.0' --windows-company-name='WVUM IRT' --windows-icon-from-ico=AirlockTools/IRT_icon_32-512.ico AirlockTools/AirlockTools_client.py --deployment --assume-yes-for-downloads diff --git a/.gitea/workflows/loxide_lib.yml b/.gitea/workflows/loxide_lib.yml new file mode 100644 index 0000000..c991875 --- /dev/null +++ b/.gitea/workflows/loxide_lib.yml @@ -0,0 +1,36 @@ +name: Build Library +run-name: ${{ gitea.actor }} +on: + push: + paths: + - airlock_libs/** + +jobs: + Build Library: + runs-on: debian-stable + steps: + - name: Install Prerequisites + run: | + apt update + apt install curl git python3 pip pkg-config openssl libssl-dev patchelf binutils-mingw-w64-x86-64 mingw-w64 -y + curl https://sh.rustup.rs -sSf | sh -s -- -y + pip install maturin twine --break-system-packages + + - name: Pull Repository + run: | + git clone https://brotoskyj:${{ secrets.RUNNER_TOKEN }}@git.racooncity.org/brotoskyj/AirlockTools --branch RustImplementation + + - name: Compile Library and Upload + run: | + export TWINE_USERNAME=brotoskyj + export TWINE_PASSWORD=${{ secrets.RUNNER_TOKEN }} + export TWINE_REPOSITORY_URL=https://git.racooncity.org/api/packages/brotoskyj/pypi + . "$HOME/.cargo/env" + rustup target add x86_64-pc-windows-gnu + cd AirlockTools/airlock_libs + cargo clean + cargo fmt + cargo clippy --fix --all-targets --allow-dirty + maturin build --target x86_64-unknown-linux-gnu -i python3.13 --release --strip + maturin build --target x86_64-pc-windows-gnu -i python3.13 --release --strip + python3 -m twine upload target/wheels/* diff --git a/.gitignore b/.gitignore index 7d2a7e0..056024d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +*.toml +!airlock_libs/Cargo.toml +!airlock_libs/pyproject.toml .env *.html *.csv @@ -8,7 +11,6 @@ jobs.json *.xl* *.exe securitytest.py -*.toml system_config.json Development/ AirlockTools_client*/ \ No newline at end of file diff --git a/README.md b/README.md index a464e7a..d647cdc 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ Python toolkit for secure, auditable, and automated airlock agent and policy man ## 🧑‍💻 Requirements -[airlock_libs](https://git.racooncity.org/brotoskyj/-/packages/pypi/airlock-libs/0.1.1) +[airlock_libs](https://git.racooncity.org/brotoskyj/-/packages/pypi/airlock-libs/) --- diff --git a/airlock_libs/.gitea/workflows/build.yaml b/airlock_libs/.gitea/workflows/build.yaml index e69de29..7619de5 100644 --- a/airlock_libs/.gitea/workflows/build.yaml +++ b/airlock_libs/.gitea/workflows/build.yaml @@ -0,0 +1,51 @@ +name: Build EXE and Release +run-name: ${{ gitea.actor }} +on: + push: + branches: + - master + - RustImplementation + +jobs: + Build and Release: + runs-on: debian-stable + env: + DISPLAY: :99 + + steps: + - name: Install Prerequisites + run: | + dpkg --add-architecture i386 + apt update > /dev/null 2>&1 + apt install git curl wine32:i386 xvfb -y > /dev/null 2>&1 + + - name: Start X Virtual Framebuffer (Xvfb) + run: | + # Start Xvfb in the background using the defined display number + Xvfb :99 -screen 0 1024x768x16 & + + - name: Cloning Repository + run: | + git clone https://brotoskyj:${{ secrets.RUNNER_TOKEN }}@git.racooncity.org/brotoskyj/build_test --branch RustImplementation + pwd + ls + + - name: Setting Up Build Environment + run: | + apt install wine64 -y -qq > /dev/null 2>&1 + curl -L -o python.exe https://www.python.org/ftp/python/3.13.9/python-3.13.9-amd64.exe + wine python.exe /quiet /NoWeb InstallAllUsers=1 PrependPath=1 TargetDir=C:/Python313 + cp -r build_test/ ~/.wine/drive_c/Python313/ + cd ~/.wine/drive_c/Python313 + wine python.exe -m pip install nuitka pywin32 keyring --break-system-packages + wine python.exe -m pip install -r build_test/requirements.txt + wine python.exe -m pip install \ + --index-url https://git.racooncity.org/api/packages/brotoskyj/pypi/simple/ \ + airlock-libs --break-system-packages + + - name: Build Executable + env: + DISPLAY: :99 + WINEDEBUG: -all + run: | + xvfb-run -a wine cmd /c nuitka --onefile --onefile-windows-splash-screen-image=build_test/loading.png --follow-imports --include-module=keyring.backends.Windows --include-module=win32cred --include-module=pywintypes --include-module=pythoncom --include-module=win32api --include-module=win32security --include-module=win32con --windows-product-name='LoXide' --windows-product-version='1.2.10.0' --windows-company-name='WVUM IRT' --windows-icon-from-ico=build_test/IRT_icon_32-512.ico build_test/AirlockTools_client.py --deployment --assume-yes-for-downloads \ No newline at end of file diff --git a/airlock_libs/Cargo.lock b/airlock_libs/Cargo.lock index 5faf19a..70327a0 100644 --- a/airlock_libs/Cargo.lock +++ b/airlock_libs/Cargo.lock @@ -17,7 +17,7 @@ dependencies = [ [[package]] name = "airlock_libs" -version = "1.0.1" +version = "1.0.3" dependencies = [ "chrono", "indicatif", diff --git a/airlock_libs/Cargo.toml b/airlock_libs/Cargo.toml new file mode 100644 index 0000000..15f8786 --- /dev/null +++ b/airlock_libs/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "airlock_libs" +version = "1.0.3" +edition = "2024" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +chrono = "0.4.42" +indicatif = "0.18.2" +mongodb = "3.3.0" +pyo3 = { version = "0.27.0", features = ["extension-module", "generate-import-lib"] } +reqwest = { version = "0.12.24", features = ["json", "native-tls"] } +serde = "1.0.228" +serde-pyobject = "0.8.0" +serde_json = "1.0.145" +tokio = { version = "1.48.0", features = ["full"] } + +[package.metadata.maturin] +generate-abi-stubs = true + +[profile.release] +opt-level = "z" +lto = "fat" +debug = false +codegen-units = 1 +panic = 'abort' +strip = true +debug-assertions = false +overflow-checks = false diff --git a/airlock_libs/pyproject.toml b/airlock_libs/pyproject.toml new file mode 100644 index 0000000..2f78abd --- /dev/null +++ b/airlock_libs/pyproject.toml @@ -0,0 +1,14 @@ +[build-system] +requires = ["maturin1.9.6"] +build-backend = "maturin" + +[project] +name = "airlock_libs" +version = "1.0.3" +description = "Airlock Digital API Wrapper" +readme = "README.md" +license = { text = "AGPL-3.0-only" } +authors = [{ name = "James Brotosky", email = "james.brotosky@racooncity.org" }] + +[tool.maturin] # if you're building via maturin +bindings = "pyo3" \ No newline at end of file diff --git a/airlock_libs/src/services.rs b/airlock_libs/src/services.rs index bb7b11e..5056344 100644 --- a/airlock_libs/src/services.rs +++ b/airlock_libs/src/services.rs @@ -95,6 +95,7 @@ pub fn pull_policy_exec_histories( progress_bar.enable_steady_tick(std::time::Duration::from_millis(100)); let client = build_client(py, &py_self); let api: Py = py_self; + let cutoff = Local::now().naive_local() - Duration::days(days); loop { let execution_histories = history_logging( py, @@ -152,7 +153,6 @@ pub fn pull_policy_exec_histories( Ok(date) => date, Err(_) => continue, }; - let cutoff = Local::now().naive_local() - Duration::days(days); if history_date >= cutoff.into() { let key = ( executions.sha256.clone(), diff --git a/requirements.txt b/requirements.txt index bb00042..e932ee2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,4 +8,7 @@ requests==2.32.5 schedule==1.2.2 tqdm==4.67.1 urllib3==2.5.0 -bson==0.5.10 \ No newline at end of file +bson==0.5.10 + +--extra-index-url https://git.racooncity.org/api/packages/brotoskyj/pypi/simple/ +airlock_libs==1.0.3 \ No newline at end of file