Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions .github/workflows/daily-update.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: Daily Signature Update

on:
schedule:
# Run daily at 6:00 UTC
- cron: '0 6 * * *'
workflow_dispatch: # Allow manual trigger

# Prevent concurrent runs from racing to commit/merge
# cancel-in-progress: false means new runs wait instead of canceling in-progress ones
concurrency:
group: daily-update
cancel-in-progress: false

jobs:
update:
runs-on: ubuntu-latest
permissions:
contents: write

steps:
- name: Checkout stable branch
uses: actions/checkout@v6
with:
ref: stable

- name: Create temporary update branch
run: |
git checkout -b update/daily-$(date -u +%Y-%m-%d)

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Set up uv
uses: astral-sh/setup-uv@v7

- name: Install dependencies
run: uv sync

- name: Update signatures
env:
BBOT_IO_API_KEY: ${{ secrets.BBOT_IO_API_KEY }}
run: uv run python -m cloudcheck_update.cli

- name: Update README table
run: uv run python scripts/update_readme_table.py

- name: Check for changes
id: changes
run: |
if git diff --quiet; then
echo "has_changes=false" >> $GITHUB_OUTPUT
else
echo "has_changes=true" >> $GITHUB_OUTPUT
fi

- name: Commit and merge changes
if: steps.changes.outputs.has_changes == 'true'
run: |
BRANCH="update/daily-$(date -u +%Y-%m-%d)"
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add cloud_providers_v2.json README.md
git commit -m "chore: daily signature update $(date -u +%Y-%m-%d)"
git push origin "$BRANCH"
git checkout stable
git merge "$BRANCH" --no-edit -m "chore: merge daily signature update"
git push origin stable
git push origin --delete "$BRANCH"
72 changes: 35 additions & 37 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "cloudcheck"
version = "9.2.0"
version = "9.3.0"
edition = "2024"
description = "CloudCheck is a simple Rust tool to check whether an IP address or hostname belongs to a cloud provider."
license = "GPL-3.0"
Expand Down
12 changes: 8 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,16 @@
[![Python Tests](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/python-tests.yml/badge.svg?branch=stable)](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/python-tests.yml)
[![Pipeline Tests](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/pipeline-tests.yml/badge.svg?branch=stable)](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/pipeline-tests.yml)
[![Docker Tests](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/docker-tests.yml/badge.svg?branch=stable)](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/docker-tests.yml)
[![Daily Update](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/daily-update.yml/badge.svg?branch=stable)](https://github.com/blacklanternsecurity/cloudcheck/actions/workflows/daily-update.yml)

### UPDATE 01-2026: Now supports REST API!
> [!TIP]
> **UPDATE 01-2026:** Now supports REST API!

### UPDATE 12-2025: Now supports government agencies (DoD, FBI, UK MoD, RU FSO)!
> [!NOTE]
> **UPDATE 12-2025:** Now supports government agencies (DoD, FBI, UK MoD, RU FSO)!

### UPDATE 12-2025: Now rewritten in Rust!
> [!IMPORTANT]
> **UPDATE 12-2025:** Now rewritten in Rust!

CloudCheck is a simple Rust tool to check whether an IP address or hostname belongs to a cloud provider. It includes:

Expand All @@ -25,7 +29,7 @@ CloudCheck is a simple Rust tool to check whether an IP address or hostname belo

## Cloud Provider Signatures

The latest cloud provider signatures are available in [`cloud_providers_v2.json`](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloud_providers_v2.json), which is updated daily via CI/CD. Domains associated with each cloud provider are fetched dynamically from the [v2fly community repository](https://github.com/v2fly/domain-list-community), and CIDRs are fetched from [ASNDB](https://asndb.api.bbot.io/).
The latest cloud provider signatures are available in [`cloud_providers_v2.json`](https://github.com/blacklanternsecurity/cloudcheck/blob/master/cloud_providers_v2.json), which is updated daily via [CI/CD](.github/workflows/daily-update.yml). Domains associated with each cloud provider are fetched dynamically from the [v2fly community repository](https://github.com/v2fly/domain-list-community), and CIDRs are fetched from [ASNDB](https://asndb.api.bbot.io/).

Used by [BBOT](https://github.com/blacklanternsecurity/bbot) and [BBOT Server](https://github.com/blacklanternsecurity/bbot-server).

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "maturin"

[project]
name = "cloudcheck"
version = "9.2.0"
version = "9.3.0"
description = "Detailed database of cloud providers. Instantly look up a domain or IP address"
readme = "README.md"
requires-python = ">=3.9"
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.