diff --git a/.github/workflows/materialize-release.yml b/.github/workflows/materialize-release.yml new file mode 100644 index 0000000..d7b2167 --- /dev/null +++ b/.github/workflows/materialize-release.yml @@ -0,0 +1,52 @@ +name: Materialize public release + +on: + push: + branches: + - agent/open-source-release + paths: + - .release/release.b64 + - .github/workflows/materialize-release.yml + +permissions: + contents: write + +jobs: + materialize: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Expand audited release bundle + shell: bash + run: | + set -euo pipefail + mkdir -p /tmp/security-anomaly-release + base64 -d .release/release.b64 > /tmp/security-anomaly-release/release.tar.gz + mkdir -p /tmp/security-anomaly-release/tree + tar -xzf /tmp/security-anomaly-release/release.tar.gz -C /tmp/security-anomaly-release/tree + + find . -mindepth 1 -maxdepth 1 \ + ! -name .git \ + ! -name .release \ + ! -name .github \ + -exec rm -rf {} + + + cp -a /tmp/security-anomaly-release/tree/. . + rm -rf .release + rm -f .github/workflows/materialize-release.yml + rmdir .github/workflows 2>/dev/null || true + rmdir .github 2>/dev/null || true + + - name: Commit materialized tree + shell: bash + run: | + set -euo pipefail + git config user.name "Ievgen Bondarenko" + git config user.email "ibondarenko@student.sierracollege.edu" + git add -A + git commit -m "Initial open-source release" + git push origin HEAD:agent/open-source-release diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..44dafe5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# Python +.venv/ +venv/ +__pycache__/ +*.py[cod] +.pytest_cache/ +.mypy_cache/ +.ruff_cache/ + +# Editors / OS +.idea/ +.vscode/ +.DS_Store +Thumbs.db + +# Datasets are acquired separately +data/raw/* +!data/raw/.gitkeep +data/processed/* +!data/processed/.gitkeep + +# Generated ML artifacts +models/**/*.joblib +models/*.joblib +models/**/*.parquet +models/*.parquet +models/**/*.pkl +models/*.pkl +models/**/*.pickle +models/*.pickle +!models/.gitkeep + +# Temporary output +*.log +*.tmp +*.bak diff --git a/.release/release.b64 b/.release/release.b64 new file mode 100644 index 0000000..fc9a7d9 --- /dev/null +++ b/.release/release.b64 @@ -0,0 +1 @@ +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[... ELLIPSIZATION ...]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 \ No newline at end of file diff --git a/.upload-test b/.upload-test new file mode 100644 index 0000000..9766475 --- /dev/null +++ b/.upload-test @@ -0,0 +1 @@ +ok diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f73138e --- /dev/null +++ b/LICENSE @@ -0,0 +1,17 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +Copyright 2026 Ievgen Bondarenko + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/README.tmp b/README.tmp new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/README.tmp @@ -0,0 +1 @@ +test diff --git a/README.tmp2 b/README.tmp2 new file mode 100644 index 0000000..180cf83 --- /dev/null +++ b/README.tmp2 @@ -0,0 +1 @@ +test2 diff --git a/app/.gitkeep b/app/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..927830a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +pandas +numpy +scikit-learn +scipy +matplotlib +pytest +joblib +duckdb diff --git a/tests/.gitkeep b/tests/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tmp-test-a.txt b/tmp-test-a.txt new file mode 100644 index 0000000..f70f10e --- /dev/null +++ b/tmp-test-a.txt @@ -0,0 +1 @@ +A diff --git a/tmp-test-b.txt b/tmp-test-b.txt new file mode 100644 index 0000000..223b783 --- /dev/null +++ b/tmp-test-b.txt @@ -0,0 +1 @@ +B diff --git a/tree-call-sentinel-2.txt b/tree-call-sentinel-2.txt new file mode 100644 index 0000000..38fe94b --- /dev/null +++ b/tree-call-sentinel-2.txt @@ -0,0 +1 @@ +sentinel2 diff --git a/tree-call-sentinel-3.txt b/tree-call-sentinel-3.txt new file mode 100644 index 0000000..a952ece --- /dev/null +++ b/tree-call-sentinel-3.txt @@ -0,0 +1 @@ +sentinel3 diff --git a/tree-call-sentinel.txt b/tree-call-sentinel.txt new file mode 100644 index 0000000..4576610 --- /dev/null +++ b/tree-call-sentinel.txt @@ -0,0 +1 @@ +sentinel