# 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 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/*

# 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
sdks/python/**/*.c
sdks/python/**/*.so
sdks/python/**/*.egg
sdks/python/LICENSE
sdks/python/NOTICE
sdks/python/README.md
sdks/python/apache_beam/portability/api/*
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/**/*

# 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
sdks/typescript/node_modules

# Dart/Flutter
**/.dart_tool
**/.packages
**/.flutter-plugins
**/.flutter-plugins-dependencies
**/generated_plugin_registrant.dart

# Ignore Beam Playground Terraform
**/.terraform
**/*.tfstate
**/*.tfstate.*
**/*.hcl
**/*.tfvars
