Commit Graph

42 Commits

Author SHA1 Message Date
jonathanmetzman 7693e9640c
[clusterfuzzlite] Make timeout and OOM reporting optional. (#6711)
OOMs will be reported by default. Timeouts wont.
Fixes: https://github.com/google/oss-fuzz/issues/6703
Should also fix: https://github.com/google/oss-fuzz/issues/6619
Fixes: https://github.com/google/oss-fuzz/issues/3432
Related: https://github.com/google/oss-fuzz/issues/6685
2021-11-02 08:01:46 -04:00
jonathanmetzman 36e5931a19
Make a better api for platform specific config. (#6708)
1. Move most of the generic stuff into BasePlatformConfig.
2. Make a GCB platform config that sets WORKSPACE and PROJECT_SRC_PATH so users don't have to.
3. Make a skeleton prow platform_config for Mitchel to fill out.
4. Make users explicitly specify the CFL_PLATFORM so we can pick CI environments
2021-11-01 12:29:38 +00:00
jonathanmetzman 4ce563f882
Fix diffing on non-GitHub and improve config (#6707)
Fix diffing on non-GitHub and improve config

1. Remove obsolete comments.
2. Remove unused function get_pr_ref
3. Correct comment on git_sha
4. Rename commit_sha to git_sha
5. Make base_commit, pr_ref, and base_ref non-github specific and move to
CiEnvironment.
6. Hoist get_diff_base to base class to allow diffing
7. Fix downloading coverage on non-Github.
8. Add TODO so that we don't assume github actions is run on github.com
(enterprise users)
9. Rename repo_url to git_url.
10. Add missing git_url method base class.
11. Clarify what git_url, git_sha and pr_ref are for and leave TODOs about how
we can eliminate them.
12. Fix typos.
2021-10-31 20:36:07 -04:00
Oliver Chang 3c564bca6c
Fix download_latest_build for pull requests. (#6688)
Getting the LATEST_BUILD_WINDOW latest commits from HEAD^ is wrong. We
should use the diff base instead.

Also modify the Ci.get_diff_base methods to not include "..." in the
return value. This will be appended in get_changed_code_under_test
instead.

This also potentially fixes a behaviour mismatch with GitHub
PRs and diffing against the latest base branch rather than
git merge-base base-branch HEAD.
2021-10-29 09:23:33 -04:00
jonathanmetzman b2fa3547b2
[clusterfuzzlite] Fixes for gsutil (#6683)
1 Fix usage of gsutil tool.
2 Get rid of run_fuzzers_mode and change to mode. Fixes: #6677
3 Install requirements before copying source code to make iterative development of cifuzz code faster.
2021-10-28 15:00:44 -04:00
jonathanmetzman b77a55b9b4
[ClusterFuzzLite] Support GCB and gsutil/gcs as filestore. (#6629)
* add gsutil filestore

* lint

* Fix

* Add build image script

* get gcb fuzzing working

* fmt and fix config_utils_test

* Check that crashes are uploaded

* Add no_filestore

* fix test

* fix tests

* fix

* Print crash URL

* Fix

* fix

* fmt

* lnt

* fix

* fmt
2021-10-27 10:00:04 -04:00
Oliver Chang 9aa85855b4
cifuzz: Rename run-fuzzers-mode to mode. (#6600)
Also change the default value of "ci" to the more consistent and
descriptive "code-change".
2021-10-20 15:02:17 +11:00
Oliver Chang e801a34379
cflite: Support private repos (#6592)
Pass github token during cloning.

Fixes #6584
2021-10-20 13:51:57 +11:00
Oliver Chang c40dd1eb74
Get repository URL from environment variable instead. (#6582)
* Get repository URL from environment variable instead.

Fixes #6576.

* fix lint

* use https instead
2021-10-20 08:22:11 +11:00
jonathanmetzman 01f58c4e4f
[cifuzz] Improve handling of coverage builds. (#6573)
Don't delete unaffected fuzzers and don't do bad build check.
2021-10-11 17:15:09 +11:00
jonathanmetzman 26a0eab439
[cifuzz][prow] Support docker in docker to support prow. (#6556) 2021-10-05 09:01:38 -04:00
jonathanmetzman 287e35cd4d
[clusterfuzzlite] Keep unaffected fuzzers when uploading a build. (#6530)
Otherwise incomplete builds may be uploaded.
Fixes: https://github.com/google/oss-fuzz/issues/6529
Related: https://github.com/google/oss-fuzz/issues/6525
2021-10-01 14:15:29 -04:00
Oliver Chang a4bc23909b
Don't upload builds in run_fuzzers. (#6151)
The current way adds a lot of ordering assumptions, and doesn't fit too
well with parallel batch fuzzing either. Add a "upload-build" boolean action
input that can be added to "build_fuzzers" to upload latest builds
instead.

Builds are now uploaded by commit hash, rather than a fixed "latest" name.
ClusterFuzzLite's download_latest_build will check the last 3 commits and download the
first available build by git hash.
2021-08-17 06:36:06 +00:00
jonathanmetzman 94cfc4fe2f
[cifuzz] Add pruning task (#6188)
Fixes: #6064
2021-08-10 11:10:10 -07:00
jonathanmetzman d01808333d
[cifuzz] Fuzz in cifuzz-base (#6142)
Fixes: #5926
2021-08-05 13:27:24 -07:00
jonathanmetzman aac1cb8c76
[infra][NFC] Use one source of truth for engines, languages etc. (#6163)
Do this only where it makes sense. For example, since CIFuzz doesn't
support dataflow, maintain a separate source of truth.
2021-08-04 17:04:55 -07:00
jonathanmetzman f0a42fbb1f
[CIFuzz] Force external to use .clusterfuzzlite for build integrations. (#6167) 2021-08-04 16:13:51 -07:00
jonathanmetzman 0bf87a10c4
[cifuzz] Only grab github-specific env vars on github (#6150)
This removes need for non-OSS-Fuzz users to fake using OSS-Fuzz.

Fixes: #6129
2021-08-03 18:13:59 -07:00
jonathanmetzman 0ea44bb355
[cifuzz][NFC] Move default configs to config_utils.py (#6157) 2021-08-03 17:59:17 -07:00
jonathanmetzman 432105a31a
[cifuzz][NFC] Move Workspace to workspace_utils. (#6158)
In hindsight, it doesn't have a lot to do with the rest of
config_utils. And config_utils is getting crowded.
2021-08-03 17:58:20 -07:00
jonathanmetzman c75d1b362f
[cifuzz] Create validate method on BaseConfig (#6135)
* [cifuzz] Create validate method on BaseConfig

Use it to validate that either OSS_FUZZ_PROJECT_NAME
or BUILD_INTEGRATION_PATH is set.
Also use it to validate that workspace is set
(rather than duplicate code).
Add tests.

* Use env var hack to bypass valdiation

* fix

* fix

* fmt

* fix

* tmp

* fix
2021-08-02 12:37:37 -07:00
Oliver Chang 2bc0114b58
Handle CI fuzz builds from events other than push or pull_request. (#6055)
Don't try to find unaffected fuzzers by diffing against a base commit as
they don't exist in those contexts.

For #6053.
2021-07-30 02:40:00 +00:00
jonathanmetzman 8eb0455476
[CIFuzz] Allow users to specify if unreproducible crashes are reported (#6138) 2021-07-29 15:41:36 +00:00
jonathanmetzman 729a8fe695
[NFC][cifuzz] Improve env var handling. (#6137)
Also delete useless TODOs.
2021-07-29 08:31:51 -07:00
jonathanmetzman 7a33d092ea
[CIFuzz] Change behavior of PROJECT_SRC_PATH to be clearer. (#6136)
Don't assume that path is relative to workspace if it is not absolute.
Only make this assumption on GitHub where it will always be true.
Also, add tests.
2021-07-29 08:10:58 -07:00
jonathanmetzman 71959211a5
[CIFuzz][NFC] Add tests for config_utils and do some minor refactoring (#6128) 2021-07-28 08:59:27 -07:00
jonathanmetzman 6f0aa82cd1
[NFC][cifuzz] Move Workspace from docker into config_utils. (#6117)
It doesn't really fit into docker.
2021-07-27 12:11:53 -07:00
jonathanmetzman 103e002ac1
[cifuzz] Get rid of MANUAL_SRC_PATH (#6120) 2021-07-27 11:49:52 -07:00
Oliver Chang 69400fb24b
Add a Git backed filestore. (#6088)
- Add storage-repo, storage-repo-branch, and
  storage-repo-branch-coverage fields to the actions, to indicate that
  the Git filestore should be used.
- The CI provided filestore is still used for crashes and builds.
- Replace generic Filestore.upload_directory with typed upload methods
  which matches the download methods.
- Rename upload_latest_build to upload_build to make it more generic.
- Make artifact name prefixes an implementation detail of the store.

For #6052.
2021-07-27 10:46:20 +10:00
Oliver Chang c7cab23c20
Make oss-fuzz-project-name optional. (#6071)
Also rename code uses from `project_name` to `oss_fuzz_project_name`, to
be more explicit, and use it to determine whether or not we're running
an OSS-Fuzz project or not.

For external fuzzing #6051.
2021-07-21 05:32:32 +00:00
jonathanmetzman 343e1b2d33
[CIFuzz] Add coverage report generation. (#5937)
Also:
1. Support coverage builds.
2. Add an integration test for coverage builds and reports.
3. Refactor docker code so that there is less duplication in getting arguments for docker run, in particular when handling container (production) vs no container (testing).
4. Rename coverage.py to get_coverage_report.
5. Add tests for untested functions in docker.py
6. Add a test for get_fuzz_target_runner.
2021-06-23 07:30:11 -07:00
jonathanmetzman 26dea63cde
[CIFuzz][NFC] Replace format strings with f-strings. (#5933)
Also replace % formatting.
2021-06-17 11:26:42 -07:00
jonathanmetzman 8c4ad095e9
[CIFuzz] Refactor in preparation for filestore (#5841)
1. Moving the _create_config and create_config functions from build_fuzzers_test.py and run_fuzzers_test.py into test_helpers.py (which is now part of cifuzz instead of infra) and share code between them.
2. Rename artifacts_dir to crashes_dir in run_fuzzers.py. "artifacts" is ambiguous.
3. Make some small changes to pytest.ini to improve debugging.
2021-05-26 09:45:22 -07:00
jonathanmetzman d8b0c77eae
[CIFuzz] Support non-github action CI for external projects (#5824)
This is incomplete for a few reasons.
1. It probably can't diff properly.
2. It assumes the project source should be put in /src/$PROJECT_NAME.
2021-05-24 21:22:01 +00:00
jonathanmetzman 00ad715801
[CIFuzz] Make it possible to skip bad build check. (#5475)
This will mainly be useful for non-OSS-Fuzz users.
Though it can also be used by OSS-Fuzz users to speed things
up (very slightly in most cases).
Fixes #4377
2021-03-23 09:22:53 -07:00
jonathanmetzman 3465403f30
[CIFuzz] Add functionality to save diskspace (#5342)
* [CIFuzz] Add functionality to save diskspace.

Add a LOW_DISK_SPACE env/config var. When this is specified
(always true for Github actions) run_fuzzers will delete
base-builder and the project builder image before fuzzing.
After it finishes fuzzing with a target, it will also
delete the targets, its seed corpus and its corpus.

Related: #4879
2021-03-12 07:27:07 -08:00
jonathanmetzman 28b35e36fe
[CIFuzz] Support languages non-C++ projects (e.g. Python projects) (#5222)
Allow use of non-C++ projects by specifying the language in the workflow file.
Fixes #5195
2021-02-19 11:54:15 -08:00
jonathanmetzman 7f150fe75e
[cifuzz] Abstract-away OSS-Fuzz specific bits (#5088)
Abstract away OSS-Fuzz specific bits into the OSSFuzz implementation
of the ClusterFuzzDeployment class. This will make it easier to implement
support for other deployments of ClusterFuzz (including ClusterFuzzLite).
2021-02-03 12:46:19 -08:00
jonathanmetzman 95d3905ec9
[cifuzz] Support a batch fuzzing mode (#5073)
In this mode, CIFuzz will keep fuzzing until the time limit is reached, even if a crash was found.
2021-02-01 10:49:33 -08:00
jonathanmetzman 4c4b137a70
[cifuzz][external] Use ssh_url and fix affected fuzzers (#5072)
1. Use ssh_url.

This only affects external (non-oss-fuzz) users.
Since there are none, it doesn't affect anyone.
Even if it did, exploitation would require owning the network
Github actions runs on.
This is to prevent MITM attacks.

2. Affected fuzzers bug:
We accidentally were skipping the remove unaffected functionality.
2021-01-29 10:33:36 -08:00
jonathanmetzman f2756d7321
[CIFuzz] Move run_fuzzers to new config system (#5063)
Also, decide is_github based on something not used/faked by Skia.
2021-01-29 09:49:03 +11:00
jonathanmetzman d7e85a20b0
[CIFuzz] Fix diffing + Refactor (#5032)
* [CIFuzz] Fix diffing + Refactor

Make diffing work in two scenarios where it previously failed:
1. Commit fuzzing. In this case, we diff $COMMIT against
$COMMIT^1 because the intent here is to fuzz the commit.
2. Fuzzing PRs that aren't to master. In this case, we previously
were diffing against origin/master. Instead, diff against the local
version of the base repo. This also has the nice effect of handling
PRs that havent pulled from master recently enough.

Also do refactoring.
1. Move code that is different for differenct CI systems to continuous_integration.py
2. Change how configuration in build_fuzzers is handled.
Previously configuration was gotten in build_fuzzers_entrypoint
and passed as individual params. This made code ugly and hard to
read. Instead, move code dealing with config to it's own module
config_utils. This module implements a config class which can
be used to create objects that are passed around to code that needs
it. Making the code much easier to read.
TODO: Move run_fuzzers code to new config system.
2021-01-28 12:10:57 -08:00