blob: 94cc5160d824ccf9e73f27ca083daecda2024687 [file] [log] [blame]
// Copyright (C) 2022 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// A proto definition used to parse METADATA file in third party projects.
// This proto will only contain fields and values used by android compliance.
// It is not intended to be the formal definition of METADATA file.
// See google3/third_party/metadata.proto if you need to add more stuff to
// match upstream. Do not add new fields and values here. Add them upstream
// when necessary, and copy them here.
syntax = "proto2"; // As long as upstream is proto2...
package project_metadata;
option go_package = "android/soong/compliance/project_metadata_proto";
// Definitions for project metadata. (go/thirdparty/metadata)
// Special naming conventions:
// Repeated fields should have singular names (instead of plural).
message Metadata {
// Name of this API/package.
optional string name = 1;
// A short description (a few lines) of the package. It will be
// included on the summary page.
// Example: "Handles location lookups, throttling, batching, etc."
optional string description = 3;
// Specifies additional data about third-party packages.
optional ThirdParty third_party = 13;
}
message ThirdParty {
// The name and description for the package should be specified using the top
// level fields in MetaData above
//
// Description should only specify a short description (a few lines) of the
// packages. Instructions for maintainers or similar information should be
// specified in BUILD comments, a separate README.md file, etc.
// URL(s) associated with the package.
//
// At a minimum, all packages must specify a URL which identifies where it
// came from, containing a type of: ARCHIVE, GIT, PIPER, or OTHER. Typically,
// a package should contain only a single URL from these types. Occasionally,
// a package may be broken across multiple archive files for whatever reason,
// in which case having multiple ARCHIVE URLs is okay. However, this should
// not be used to combine different logical packages that are versioned and
// possibly licensed differently.
repeated URL url = 1;
// The package version. In order of preference, this should contain:
// - If the package comes from Git or another source control system,
// a specific tag or revision in source control, such as "r123" or
// "58e27d2". This MUST NOT be a mutable ref such as a branch name.
// - a released package version such as "1.0", "2.3-beta", etc.
// - the date the package was retrieved, formatted as "As of YYYY-MM-DD".
optional string version = 2;
// The date of the change in which the package was last upgraded from
// upstream.
// This should only identify package upgrades from upstream, not local
// modifications. This may identify the date of either the original or
// merged change.
//
// Note: this is NOT the date that this version of the package was released
// externally.
optional Date last_upgrade_date = 10;
// License type that identifies how the package may be used. See
// go/thirdpartylicenses for instructions on selecting the appropriate type.
optional LicenseType license_type = 4;
// Description of local changes that have been made to the package. This does
// not need to (and in most cases should not) attempt to include an exhaustive
// list of all changes, but may instead direct readers to review the local
// commit history, a collection of patch files, a separate README.md (or
// similar) document, etc.
// Note: Use of this field to store IDs of advisories fixed with a backported
// patch is deprecated, use "security.mitigated_security_patch" instead.
optional string local_modifications = 6;
// The URL for any public mirror created for compliance purposes.
// See go/thirdpartylicenses#reciprocal policy for more details.
optional string compliance_mirror_url = 12;
// The homepage for the package. This will eventually replace
// `url { type: HOMEPAGE }`
optional string homepage = 14;
}
// URL associated with a third-party package.
message URL {
enum Type {
// The homepage for the package. For example, "https://bazel.io/". This URL
// is optional, but encouraged to help disambiguate similarly named packages
// or to get more information about the package. This is especially helpful
// when no other URLs provide human readable resources (such as git:// or
// sso:// URLs).
HOMEPAGE = 1;
// The URL of the archive containing the source code for the package, for
// example a zip or tgz file.
ARCHIVE = 2;
// The URL of the upstream git repository this package is retrieved from.
// For example:
// - https://github.com/git/git.git
// - git://git.kernel.org/pub/scm/git/git.git
//
// Use of a git URL requires that the package "version" value must specify a
// specific git tag or revision.
GIT = 3;
// The URL of the upstream SVN repository this package is retrieved from.
// For example:
// - http://llvm.org/svn/llvm-project/llvm/
//
// Use of an SVN URL requires that the package "version" value must specify
// a specific SVN tag or revision.
SVN = 7;
// The URL of the upstream mercurial repository this package is retrieved
// from. For example:
// - https://mercurial-scm.org/repo/evolve
//
// Use of a mercurial URL requires that the package "version" value must
// specify a specific tag or revision.
HG = 8;
// The URL of the upstream darcs repository this package is retrieved
// from. For example:
// - https://hub.darcs.net/hu.dwim/hu.dwim.util
//
// Use of a DARCS URL requires that the package "version" value must
// specify a specific tag or revision.
DARCS = 9;
// The URL of the upstream piper location. This is primarily used when a
// package is being migrated into third_party from elsewhere in piper, or
// when a package is being newly developed in third_party. For newly
// developed packages, the PIPER URL should reference the package itself
// (e.g. "http://google3/third_party/my/package")
PIPER = 4;
// A URL that does not fit any other type. This may also indicate that the
// source code was received via email or some other out-of-band way. This is
// most commonly used with commercial software received directly from the
// vendor. In the case of email, the URL value can be used to provide
// additional information about how it was received.
OTHER = 11;
// The URL identifying where the local copy of the package source code can
// be found.
//
// Typically, the metadata files describing a package reside in the same
// directory as the source code for the package. In a few rare cases where
// they are separate, the LOCAL_SOURCE URL identifies where to find the
// source code. This only describes where to find the local copy of the
// source; there should always be an additional URL describing where the
// package was retrieved from.
//
// Examples:
// - http://google3/third_party/java_src/gerritcodereview/gerrit/
// - https://android.googlesource.com/platform/external/apache-http/
LOCAL_SOURCE = 6;
}
// The type of resource this URL identifies.
optional Type type = 1;
// The actual URL value. URLs should be absolute and start with 'http://' or
// 'https://' (or occasionally 'git://' or 'ftp://' where appropriate).
optional string value = 2;
}
// License type that identifies how the packages may be used. See
// go/thirdpartylicenses for full explanation of each license type.
enum LicenseType {
BY_EXCEPTION_ONLY = 1;
NOTICE = 2;
PERMISSIVE = 3;
RECIPROCAL = 4;
RESTRICTED_IF_STATICALLY_LINKED = 5;
RESTRICTED = 6;
UNENCUMBERED = 7;
}
// Represents a whole or partial calendar date, such as a birthday. The time of
// day and time zone are either specified elsewhere or are insignificant. The
// date is relative to the Gregorian Calendar. This can represent one of the
// following:
//
// * A full date, with non-zero year, month, and day values.
// * A month and day, with a zero year (for example, an anniversary).
// * A year on its own, with a zero month and a zero day.
// * A year and month, with a zero day (for example, a credit card expiration
// date).
message Date {
// Year of the date. Must be from 1 to 9999, or 0 to specify a date without
// a year.
optional int32 year = 1;
// Month of a year. Must be from 1 to 12, or 0 to specify a year without a
// month and day.
optional int32 month = 2;
// Day of a month. Must be from 1 to 31 and valid for the year and month, or 0
// to specify a year by itself or a year and month where the day isn't
// significant.
optional int32 day = 3;
}