# NOTE: if you modify this file, you probably need to modify the file set that
# is an input to 'maven-assembly-plugin' that generates source distribution.
# This is typically in files named 'src.xml' throughout this repository.

# Ignore IDE files
.codex/
.trae/
.cursor/
.windsurf/
.claude/

# Ignore any offline repositories the user may have created.
**/offline-repository/**/*

# Ignore files generated by the Gradle build process.
**/.gradle/**/*
**/.gogradle/**/*
**/.nb-gradle/**/*
**/gogradle.lock
**/build/**/*
.test-infra/**/vendor/**/*
sdks/**/vendor/**/*
runners/**/vendor/**/*
**/.gradletasknamecache
**/generated/*
/go.mod
/go.sum

# Ignore sources generated into the main tree
**/src/main/generated/**
**/src/test/generated_tests/**

# Ignore files generated by the Maven build process.
**/bin/**/*
**/dependency-reduced-pom.xml
**/target/**/*

# Ignore generated archetypes
sdks/java/maven-archetypes/examples/src/main/resources/archetype-resources/src/
sdks/java/maven-archetypes/examples-java8/src/main/resources/archetype-resources/src/
sdks/java/maven-archetypes/gcp-bom-examples/src/main/resources/archetype-resources/src/
sdks/java/maven-archetypes/examples/src/main/resources/archetype-resources/sample.txt

# Ignore files generated by the Python build process.
**/*.pyc
**/*.pyo
**/*.pyd
**/*.egg-info/
**/.eggs/
**/nose-*.egg/
**/.tox/**/*
**/dist/**/*
**/distribute-*/**/*
**/env/**/*
**/.mypy_cache
**/.dmypy.json
**/.hypothesis
sdks/python/**/*.c
sdks/python/**/*.so
sdks/python/**/*.egg
sdks/python/LICENSE
sdks/python/NOTICE
sdks/python/README.md
sdks/python/apache_beam/transforms/xlang/*
sdks/python/apache_beam/portability/api/*
sdks/python/apache_beam/yaml/docs/*
sdks/python/nosetests*.xml
sdks/python/pytest*.xml
sdks/python/postcommit_requirements.txt
sdks/python/.coverage
sdks/python/coverage.xml

# Ignore IntelliJ files.
**/.idea/**/*
**/*.iml
**/*.ipr
**/*.iws
**/out/**/*

# Ignore Eclipse files.
**/.classpath
**/.project
**/.factorypath
**/.checkstyle
**/.fbExcludeFilterFile
**/.apt_generated/**/*
**/.settings/**/*
**/.gitignore

# Ignore Visual Studio Code files.
**/.vscode/**/*

# Hotspot VM leaves this log in a non-target directory when java crashes
**/hs_err_pid*.log

# Ignore files that end with '~', since they are most likely auto-save files
# produced by a text editor.
**/*~

# Ignore MacOSX files.
**/.DS_Store/**/*
**/.DS_Store

# Ignore Jupyter notebook checkpoints.
**/.ipynb_checkpoints/**/*

# Ignore python venv
**/venv

# pyenv
.python-version

# NOTE: if you modify this file, you probably need to modify the file set that
# is an input to 'maven-assembly-plugin' that generates source distribution.
# This is typically in files named 'src.xml' throughout this repository.

# JetBrains Education files
!**/study_project.xml
**/.coursecreator/**/*

.pytest_cache
.pytest_cache/**/*

# Hugo
website/www/node_modules
website/www/dist
website/www/site/resources
website/www/site/github_samples
website/www/site/code_samples
website/www/site/_config_branch_repo.toml
website/www/yarn-error.log
!website/www/site/content

# Node
**/node_modules

# Dart/Flutter
**/.dart_tool
**/.flutter-plugins
**/.flutter-plugins-dependencies
**/.packages
**/generated_plugin_registrant.dart
playground/frontend/playground_components/pubspec.lock
playground/frontend/playground_components/test/tools/extract_symbols_java/dependencies
playground/frontend/playground_components_dev/pubspec.lock

# Ignore Beam Playground Terraform
playground/cloudfunction.zip

# Ignore Terraform related
**/.terraform/
**/*.tfstate
**/*.tfstate.*

# Ignore Katas auto-generated files
**/*-remote-info.yaml

# Ignore .test-infra/mock-apis related files
.test-infra/mock-apis/**/charts/

# Ignore .test-infra/metrics/github_runs_prefetcher/code.zip
# as its generated with terraform
.test-infra/metrics/sync/github/github_runs_prefetcher/code.zip
.venv/
