Skip to content

Commit e676ad0

Browse files
authored
Merge pull request #28 from TacoRocket/release-v1.0.0
Prepare AzureFox v1.0.0 release
2 parents c28d50c + 7147821 commit e676ad0

9 files changed

Lines changed: 223 additions & 10 deletions

File tree

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* @TacoRocket

.github/dependabot.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "github-actions"
4+
directory: "/"
5+
schedule:
6+
interval: "weekly"
7+
day: "monday"
8+
time: "09:00"
9+
timezone: "America/Chicago"
10+
open-pull-requests-limit: 3
11+
labels:
12+
- "dependencies"
13+
- "github-actions"
14+
commit-message:
15+
prefix: "ci"
16+
17+
- package-ecosystem: "pip"
18+
directory: "/"
19+
schedule:
20+
interval: "weekly"
21+
day: "monday"
22+
time: "09:00"
23+
timezone: "America/Chicago"
24+
open-pull-requests-limit: 3
25+
labels:
26+
- "dependencies"
27+
- "python"
28+
commit-message:
29+
prefix: "deps"

.github/workflows/release.yml

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
name: release
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
8+
permissions:
9+
contents: read
10+
11+
concurrency:
12+
group: release-${{ github.ref }}
13+
cancel-in-progress: false
14+
15+
jobs:
16+
build:
17+
runs-on: ubuntu-latest
18+
permissions:
19+
contents: read
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@v4
23+
24+
- name: Setup Python
25+
uses: actions/setup-python@v5
26+
with:
27+
python-version: "3.11"
28+
29+
- name: Build dependencies
30+
run: |
31+
python -m pip install --upgrade pip
32+
pip install build
33+
34+
- name: Build artifacts
35+
run: python -m build
36+
37+
- name: Smoke-test built wheel
38+
run: |
39+
set -euo pipefail
40+
wheel=(dist/*.whl)
41+
if [ "${#wheel[@]}" -ne 1 ]; then
42+
echo "Expected exactly one wheel artifact in dist/" >&2
43+
exit 1
44+
fi
45+
46+
python -m venv /tmp/azurefox-release-smoke-venv
47+
/tmp/azurefox-release-smoke-venv/bin/pip install "${wheel[0]}"
48+
/tmp/azurefox-release-smoke-venv/bin/azurefox help >/dev/null
49+
AZUREFOX_FIXTURE_DIR=tests/fixtures/lab_tenant \
50+
/tmp/azurefox-release-smoke-venv/bin/azurefox \
51+
--outdir /tmp/azurefox-release-smoke \
52+
--output json \
53+
whoami \
54+
>/dev/null
55+
56+
- name: Upload release artifacts
57+
uses: actions/upload-artifact@v4
58+
with:
59+
name: release-dist
60+
path: dist/*
61+
if-no-files-found: error
62+
63+
github-release:
64+
runs-on: ubuntu-latest
65+
needs: build
66+
permissions:
67+
contents: write
68+
steps:
69+
- name: Download release artifacts
70+
uses: actions/download-artifact@v4
71+
with:
72+
name: release-dist
73+
path: dist
74+
75+
- name: Publish GitHub release
76+
env:
77+
GH_TOKEN: ${{ github.token }}
78+
run: |
79+
set -euo pipefail
80+
assets=(dist/*)
81+
if [ "${#assets[@]}" -eq 0 ]; then
82+
echo "No release assets found in dist/" >&2
83+
exit 1
84+
fi
85+
86+
if gh release view "${GITHUB_REF_NAME}" >/dev/null 2>&1; then
87+
gh release upload "${GITHUB_REF_NAME}" "${assets[@]}" --clobber
88+
else
89+
gh release create "${GITHUB_REF_NAME}" "${assets[@]}" \
90+
--generate-notes \
91+
--title "${GITHUB_REF_NAME}" \
92+
--verify-tag
93+
fi
94+
95+
pypi-publish:
96+
runs-on: ubuntu-latest
97+
needs: build
98+
environment:
99+
name: pypi
100+
permissions:
101+
id-token: write
102+
steps:
103+
- name: Download release artifacts
104+
uses: actions/download-artifact@v4
105+
with:
106+
name: release-dist
107+
path: dist
108+
109+
- name: Publish to PyPI via Trusted Publishing
110+
uses: pypa/gh-action-pypi-publish@release/v1
111+
with:
112+
packages-dir: dist/

CHANGELOG.md

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,24 @@
11
# Changelog
22

3-
## [0.1.0] - 2026-03-10
3+
## [1.0.0] - 2026-04-02
44

55
### Added
6-
- Initial AzureFox scaffold with Milestone 1 command surface.
7-
- Shared auth/session, client factory, collectors, correlation layer, and output writers.
8-
- JSON schema snapshots, fixture dataset, golden output snapshots.
9-
- CI workflow for lint + unit/contract/smoke checks.
6+
- AzureFox Phase 1 through Phase 3 command surface, including identity, privilege, secrets,
7+
config, storage, compute, app, API, DNS, and network-oriented recon commands.
8+
- Operator-first grouped orchestration with `all-checks` plus per-section execution.
9+
- API-mapping and feature-complete reference docs that define the current evidence boundary.
10+
- Release workflow for GitHub Releases plus PyPI Trusted Publishing.
1011

12+
### Changed
13+
- Hardened truthfulness across trust, workload, endpoint, and storage outputs so commands do not
14+
imply stronger proof than the current read path supports.
15+
- Improved `all-checks` help and README guidance to set longer-runtime expectations clearly.
16+
- Tightened release packaging metadata and install guidance for the public `azure` dependency
17+
profile.
18+
19+
### Fixed
20+
- Normalized ARM ID joins used by `network-ports`, `workloads`, and related endpoint correlation
21+
so live joins stay stable across casing differences.
22+
- Corrected the Azure extras packaging constraint for `azure-mgmt-sql` so fresh
23+
`pip install -e '.[azure]'` installs succeed on the stable package index.
24+
- Added CI gitleaks scanning and tokenless Trusted Publishing workflow support.

README.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
</p>
66

77
AzureFox is a Python CLI for offensive-focused Azure situational awareness.
8+
It is designed to help operators and testers quickly build a truthful picture of Azure identity,
9+
resource, network, secrets, and workload attack surface from management-plane read paths.
810

911
## Attribution
1012

@@ -51,22 +53,30 @@ Fox.
5153
```bash
5254
python -m venv .venv
5355
source .venv/bin/activate
54-
pip install -e '.[azure]'
56+
pip install 'azurefox[azure]'
5557
azurefox --outdir /tmp/azurefox-demo whoami --output table
5658
azurefox --outdir /tmp/azurefox-demo all-checks --output table
5759
```
5860

61+
For local source-based development, use `pip install -e '.[dev,azure]'`.
62+
5963
## Install Profiles
6064

6165
AzureFox keeps a small core package and uses extras for live Azure collection and contributor
6266
tooling.
6367

68+
- `pip install azurefox`
69+
installs the core CLI from PyPI without live Azure SDK dependencies; this is mostly useful for
70+
help output, packaging work, or fixture-based local development
6471
- `pip install -e .`
6572
installs the core CLI only; this is mostly useful for help output, packaging work, or
6673
fixture-based local development
74+
- `pip install 'azurefox[azure]'`
75+
installs the published AzureFox package plus the Azure SDK dependencies required for live Azure
76+
command execution; most operators should use this profile
6777
- `pip install -e '.[azure]'`
6878
installs the Azure SDK dependencies required for live Azure command execution; most operators
69-
should use this profile
79+
should use this profile when working from a local checkout
7080
- `pip install -e '.[dev]'`
7181
installs lint, test, and type-check tooling for contributors working without live Azure SDK
7282
dependencies

SECURITY.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Security Policy
2+
3+
## Supported Versions
4+
5+
AzureFox is currently maintained on the latest release line.
6+
7+
| Version | Supported |
8+
| --- | --- |
9+
| 1.x | Yes |
10+
| < 1.0.0 | No |
11+
12+
## Reporting A Vulnerability
13+
14+
Please do not open public GitHub issues for suspected security vulnerabilities.
15+
16+
Preferred path:
17+
18+
- use GitHub private vulnerability reporting or a private security advisory if it is available
19+
20+
If private reporting is not available, contact the maintainer directly through GitHub rather than
21+
posting a public issue with exploit details.
22+
23+
When reporting, please include:
24+
25+
- affected version
26+
- reproduction steps
27+
- impact and scope
28+
- any suggested remediation or mitigation
29+
30+
## Scope Notes
31+
32+
AzureFox intentionally enumerates risky cloud posture and attack-surface signals. Reports that a
33+
fixture, lab artifact, or intentionally documented proof environment contains insecure-by-design
34+
test posture are generally not treated as product vulnerabilities by themselves.
35+
36+
Useful security reports usually involve one of these:
37+
38+
- accidental credential exposure in the repo or release artifacts
39+
- supply-chain or release-process weaknesses
40+
- output that overstates proof in a way that could mislead operators materially
41+
- code execution, unsafe file handling, or similar implementation flaws in AzureFox itself

docs/release-process.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,10 @@ Use semantic versioning (`MAJOR.MINOR.PATCH`).
3737
git tag v<version>
3838
git push origin v<version>
3939
```
40-
8. Publish package artifact once the registry target is selected.
40+
8. Let `.github/workflows/release.yml` publish the built artifacts:
41+
- to GitHub Releases with the tag name as the release title
42+
- to PyPI via Trusted Publishing from the `pypi` GitHub Actions environment
43+
9. Keep PyPI publishing tokenless:
44+
- configure the PyPI trusted publisher for owner `TacoRocket`, repo `AzureFox`,
45+
workflow `release.yml`, and environment `pypi`
46+
- add protection rules to the `pypi` GitHub environment so publish approval stays explicit

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "azurefox"
7-
version = "0.1.0"
7+
version = "1.0.0"
88
description = "AzureFox - offensive-focused Azure situational awareness CLI"
99
readme = "README.md"
1010
requires-python = ">=3.11"

src/azurefox/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
__all__ = ["__version__"]
44

5-
__version__ = "0.1.0"
5+
__version__ = "1.0.0"

0 commit comments

Comments
 (0)