Есть такой инструмент для сканирования на утечку секретов, паролей и API ключей – GitLeaks.
Очень популярный проект, но совершенно, на мой взгляд не заслуженно. Качество кода вызывает вопросы, нельзя указывать свои списки с regex паттернами для проверки, и он не умеет отдавать правильный JSON в stdout, что делает его бесполезным автоматизации или пользовании на бэкенде.
Прекрасная возможность:
Использовать Julia – один из лучших языков программирования, который почему-то считается нишевым. Область его применения гораздо шире HPC. Он идеально подходит для решения самых разных задач.
Научиться как правильно публиковаться на GitHub.
Научиться делать линуксовые пакеты.
Долго не будем останавливаться на коде. Код лучше писать или читать, обсуждать его не очень интересно.
Сам скрипт работает следующим образом:
Usage: julia leaquor.jl [options]
Options:
-h, --help Display this help message.
--json Output results in JSON format.
--output-file FILE Write JSON results to the specified file.
--patterns FILE Load additional patterns from a YAML file.
--ignore-files LIST Comma-separated list of files to ignore (e.g., "file1.txt,file2.json").
--repo URL Clone and scan a GitHub repository (e.g., https://github.com/user/repo.git).
--dir PATH Scan a specific directory on the file system.
--entropy-threshold FLOAT Set custom entropy threshold (default: 3.5).
--log-file FILE Write logs to the specified file.
Arguments:
Either --repo or --dir must be provided.
Examples:
julia leaquor.jl --repo https://github.com/user/repo.git --json --output-file out.json
julia leaquor.jl --dir ./my_project --patterns custom_patterns.yaml | jq .
--patterns
<YAML файл с кастомными regex паттернами для поиска>
--dir
указываем директорию для сканирования
--repo
можно указывать сразу GitHub репо
Интереснее посмотреть как это правильно оформить для GitHub:
Docker и DEB пакеты
В одном Docker файле мы собираем проект на Julia. Julia в этом смысле ничем не отличается от Python или других более популярных языков.
В втором Docker файле мы так же собираем проект, но добавляется nfpm - инструмент на замну стандартному toolchainу для DEB и RPM пакетов.
# Generate DEB packages
RUN nfpm pkg --config nfpm.yaml --target leaquor.deb
# Final stage to output packages
FROM scratch
COPY --from=packager /app/leaquor.deb /leaquor.deb
Последние две директивы собирают и копируют пакет в текущую директорю.
Make
Создается Makefile который использует для Docker для сборки:
# Build the Docker image
docker-build:
@echo "Building Docker image $(DOCKER_IMAGE)..."
docker build -t $(DOCKER_IMAGE) .
# Run the Docker container
docker-run:
@echo "Running Docker container $(DOCKER_CONTAINER)..."
docker run --rm -v $(PWD):/app $(DOCKER_IMAGE) --help
Если вызвать его без аргументов то появится help:
make
Available targets:
test - Run unit tests
docker-build - Build the Docker image
docker-run - Run the Docker container
docker-push - Push the Docker image to Docker Hub
docker-clean - Clean up Docker artifacts (images, containers, volumes)
docker-clean-all - Force cleanup of all Docker images and artifacts
release - Create a GitHub release
open-issue - Open a new issue on GitHub
create-pr - Create a pull request
list-issues - List open issues
list-prs - List open pull requests
deploy-docs - Deploy documentation to GitHub Pages
check-workflows - Check GitHub Actions workflow status
generate-changelog - Generate a changelog
Этой командой можно запушить образ на DockerHub:
# Push the Docker image to Docker Hub
docker-push: docker-build
@echo "Logging into Docker Hub..."
@docker login -u $(DOCKER_HUB_USERNAME)
@echo "Tagging image for Docker Hub..."
docker tag $(DOCKER_IMAGE) $(DOCKER_HUB_REPO):latest
@echo "Pushing image to Docker Hub..."
docker push $(DOCKER_HUB_REPO):latest
@echo "Image pushed successfully to $(DOCKER_HUB_REPO):latest"
Ничто не мешает нам использовать GitHub CLI для того, чтобы тэгировать репо из грузить его, а также в GitHub release (да это там слева с цифрами v1.0.0):
# Target: Create a Git tag and release on GitHub
.PHONY: release
release:
@echo "Creating Git tag and releasing on GitHub..."
@read -p "Enter the version number (e.g., v1.0.0): " version; \
git tag -a $$version -m "Release $$version"; \
git push origin $$version; \
gh release create $$version --generate-notes
@echo "Release $$version created and pushed to GitHub."
# Upload .deb package to GitHub release
upload-release:
@if [ ! -f "leaquor.deb" ]; then \
echo "Error: leaquor.deb not found. Please run 'make package' first."; \
exit 1; \
fi
@echo "Uploading leaquor.deb to GitHub release $(RELEASE_TAG)..."
gh release upload $(RELEASE_TAG) leaquor.deb --repo $(GITHUB_REPO)
@echo "Upload complete"

Test
В данном случае мы просто запускаем скрипт в docker контейнере и используем на leaky-repo – тестовый репо где точно есть утечки секретных данных.
# Test target to validate the script
test: docker-build clone-test-repo
@echo "Running tests..."
docker run --rm \
-v $(PWD)/$(JULIA_SCRIPT):/app/$(JULIA_SCRIPT) \
-v $(PWD)/$(TEST_REPO_DIR):/app/$(TEST_REPO_DIR) \
--name $(DOCKER_CONTAINER) \
$(DOCKER_IMAGE) \
julia /app/$(JULIA_SCRIPT) --dir /app/$(TEST_REPO_DIR) \
--patterns patterns.yaml \
--output-file results.json \
--log-file /app/test.log
@echo "Tests completed. Check test.log for details."
Pipeline
Ну и наконец, чтобы все было по GitOps давайте сделаем пайплайн GitHub:
name: CI/CD Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to Docker Hub
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Build Docker image
run: make docker-build
- name: Run tests
run: make test
- name: Build package (on tag push)
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
run: make package
- name: Push Docker image to Docker Hub (on tag push)
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
run: |
docker tag leaquor-image:latest ${{ secrets.DOCKER_HUB_REPO }}:${{ github.ref_name }}
docker push ${{ secrets.DOCKER_HUB_REPO }}:${{ github.ref_name }}
Здесь в очень просто, потому что мы завернули все в Make. Можно просто запускать таргеты make docker-build, make test и делать это автоматически при пуше.
На самом деле все очень просто. С помощью Julia можно решать стандартные каждодневные day-to-day задачи, и использовать для этого Docker и GitHub.