Remove deprecated protoc-artifacts directory (#10628)
* Move build-protoc.sh script to kokoro release directory * Move pom.xml to root directory * Delete protoc-artifacts directory * Merge pom.xml into the java/protoc version * Review commentspull/10662/head
parent
83d6e74bc6
commit
d0936c37f5
9 changed files with 50 additions and 446 deletions
@ -0,0 +1,42 @@ |
||||
# Publish pre-compiled protoc artifacts |
||||
``protoc`` is the compiler for ``.proto`` files. It generates language bindings |
||||
for the messages and/or RPC services from ``.proto`` files. |
||||
|
||||
Because ``protoc`` is a native executable, the scripts under this directory |
||||
publish a ``protoc`` executable (a.k.a. artifact) to Maven repositories. The |
||||
artifact can be used by build automation tools so that users would not need to |
||||
compile and install ``protoc`` for their systems. |
||||
|
||||
If you would like us to publish protoc artifact for a new platform, please |
||||
open an issue to request it. |
||||
|
||||
## Maven Location |
||||
The published protoc artifacts are available on Maven here: |
||||
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protoc/ |
||||
|
||||
## Versioning |
||||
The version of the ``protoc`` artifact must be the same as the version of the |
||||
Protobuf project. |
||||
|
||||
## Artifact name |
||||
The name of a published ``protoc`` artifact is in the following format: |
||||
``protoc-<version>-<os>-<arch>.exe``, e.g., ``protoc-3.6.1-linux-x86_64.exe``. |
||||
|
||||
Note that artifacts for linux/macos also have the `.exe` suffix but they are |
||||
not windows binaries. |
||||
|
||||
## System requirement |
||||
Install [Apache Maven](http://maven.apache.org/) if you don't have it. |
||||
|
||||
The scripts only work under Unix-like environments, e.g., Linux, MacOSX, and |
||||
Cygwin or MinGW for Windows. Please see ``README.md`` of the Protobuf project |
||||
for how to set up the build environment. |
||||
|
||||
## Tested build environments |
||||
We have successfully built artifacts on the following environments: |
||||
- Linux x86_32 and x86_64: |
||||
- Centos 6.9 (within Docker 1.6.1) |
||||
- Ubuntu 14.04.5 64-bit |
||||
- Linux aarch_64: Cross compiled with `g++-aarch64-linux-gnu` on Ubuntu 14.04.5 64-bit |
||||
- Mac OS X x86_32 and x86_64: Mac OS X 10.9.5 |
@ -1,161 +0,0 @@ |
||||
# Build scripts that publish pre-compiled protoc artifacts |
||||
``protoc`` is the compiler for ``.proto`` files. It generates language bindings |
||||
for the messages and/or RPC services from ``.proto`` files. |
||||
|
||||
Because ``protoc`` is a native executable, the scripts under this directory |
||||
build and publish a ``protoc`` executable (a.k.a. artifact) to Maven |
||||
repositories. The artifact can be used by build automation tools so that users |
||||
would not need to compile and install ``protoc`` for their systems. |
||||
|
||||
If you would like us to publish protoc artifact for a new platform, please send |
||||
us a pull request to add support for the new platform. You would need to change |
||||
the following files: |
||||
|
||||
* [build-protoc.sh](build-protoc.sh): script to cross-build the protoc for your |
||||
platform. |
||||
* [pom.xml](pom.xml): script to upload artifacts to maven. |
||||
* [build-zip.sh](build-zip.sh): script to package published maven artifacts in |
||||
our release page. |
||||
|
||||
## Maven Location |
||||
The published protoc artifacts are available on Maven here: |
||||
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protoc/ |
||||
|
||||
## Versioning |
||||
The version of the ``protoc`` artifact must be the same as the version of the |
||||
Protobuf project. |
||||
|
||||
## Artifact name |
||||
The name of a published ``protoc`` artifact is in the following format: |
||||
``protoc-<version>-<os>-<arch>.exe``, e.g., ``protoc-3.6.1-linux-x86_64.exe``. |
||||
|
||||
Note that artifacts for linux/macos also have the `.exe` suffix but they are |
||||
not windows binaries. |
||||
|
||||
## System requirement |
||||
Install [Apache Maven](http://maven.apache.org/) if you don't have it. |
||||
|
||||
The scripts only work under Unix-like environments, e.g., Linux, MacOSX, and |
||||
Cygwin or MinGW for Windows. Please see ``README.md`` of the Protobuf project |
||||
for how to set up the build environment. |
||||
|
||||
## Building from a freshly checked-out source |
||||
|
||||
If you just checked out the Protobuf source from github, you need to |
||||
pull in any submodules. |
||||
|
||||
Under the protobuf project directory: |
||||
|
||||
|
||||
``` |
||||
git submodule update --init --recursive |
||||
``` |
||||
|
||||
### Build the artifact for each platform |
||||
|
||||
Run the build-protoc.sh script under this protoc-artifacts directory to build the protoc |
||||
artifact for each platform. For example: |
||||
|
||||
``` |
||||
$ cd protoc-artifacts |
||||
$ ./build-protoc.sh linux x86_64 protoc |
||||
``` |
||||
|
||||
The above command will produce a `target/linux/x86_64/protoc` binary under the |
||||
protoc-artifacts directory. |
||||
|
||||
For a list of supported platforms, see the comments in the build-protoc.sh |
||||
script. We only use this script to build artifacts on Ubuntu and MacOS (both |
||||
with x86_64, and do cross-compilation for other platforms. |
||||
|
||||
### Tips for building for Linux |
||||
We build on Centos 6.9 to provide a good compatibility for not very new |
||||
systems. We have provided a ``Dockerfile`` under this directory to build the |
||||
environment. It has been tested with Docker 1.6.1. |
||||
|
||||
To build a image: |
||||
|
||||
``` |
||||
$ docker build -t protoc-artifacts . |
||||
``` |
||||
|
||||
To run the image: |
||||
|
||||
``` |
||||
$ docker run -it --rm=true protoc-artifacts bash |
||||
``` |
||||
|
||||
To checkout protobuf (run within the container): |
||||
|
||||
``` |
||||
$ # Replace v3.5.1 with the version you want |
||||
$ wget -O - https://github.com/protocolbuffers/protobuf/archive/v3.5.1.tar.gz | tar xvzp |
||||
``` |
||||
|
||||
### Windows build |
||||
We no longer use scripts in this directory to build windows artifacts. Instead, |
||||
we use Visual Studio 2015 to build our windows release artifacts. See our |
||||
[kokoro windows build scripts here](../kokoro/release/protoc/windows/build.bat). |
||||
|
||||
To upload windows artifacts, copy the built binaries into this directory and |
||||
put it into the target/windows/(x86_64|x86_32) directory the same way as the |
||||
artifacts for other platforms. That will allow the maven script to find and |
||||
upload the artifacts to maven. |
||||
|
||||
## To push artifacts to Maven Central |
||||
Before you can upload artifacts to Maven Central repository, make sure you have |
||||
read [this page](http://central.sonatype.org/pages/apache-maven.html) on how to |
||||
configure GPG and Sonatype account. |
||||
|
||||
Before you do the deployment, make sure you have built the protoc artifacts for |
||||
every supported platform and put them under the target directory. Example |
||||
target directory layout: |
||||
|
||||
+ pom.xml |
||||
+ target |
||||
+ linux |
||||
+ x86_64 |
||||
protoc.exe |
||||
+ x86_32 |
||||
protoc.exe |
||||
+ aarch_64 |
||||
protoc.exe |
||||
+ ppcle_64 |
||||
protoc.exe |
||||
+ s390_64 |
||||
protoc.exe |
||||
+ osx |
||||
+ x86_64 |
||||
protoc.exe |
||||
+ x86_32 |
||||
protoc.exe |
||||
+ windows |
||||
+ x86_64 |
||||
protoc.exe |
||||
+ x86_32 |
||||
protoc.exe |
||||
|
||||
You will need to build the artifacts on multiple machines and gather them |
||||
together into one place. |
||||
|
||||
Use the following command to deploy artifacts for the host platform to a |
||||
staging repository. |
||||
|
||||
``` |
||||
$ mvn deploy -P release |
||||
``` |
||||
|
||||
It creates a new staging repository. Go to |
||||
https://oss.sonatype.org/#stagingRepositories and find the repository, usually |
||||
in the name like ``comgoogle-123``. Verify that the staging repository has all |
||||
the binaries, close and release this repository. |
||||
|
||||
|
||||
## Tested build environments |
||||
We have successfully built artifacts on the following environments: |
||||
- Linux x86_32 and x86_64: |
||||
- Centos 6.9 (within Docker 1.6.1) |
||||
- Ubuntu 14.04.5 64-bit |
||||
- Linux aarch_64: Cross compiled with `g++-aarch64-linux-gnu` on Ubuntu 14.04.5 64-bit |
||||
- Mac OS X x86_32 and x86_64: Mac OS X 10.9.5 |
@ -1,120 +0,0 @@ |
||||
#!/bin/bash |
||||
|
||||
if [ $# -ne 2 ]; then |
||||
cat <<EOF |
||||
Usage: $0 <TARGET> <VERSION_NUMBER> |
||||
|
||||
TARGET: protoc | protoc-gen-javalite |
||||
|
||||
Example: |
||||
$ $0 protoc 3.0.0 |
||||
$ $0 protoc-gen-javalite 3.0.0 |
||||
|
||||
This script will download pre-built protoc or protoc plugin binaries from maven |
||||
repository and create .zip packages suitable to be included in the github |
||||
release page. If the target is protoc, well-known type .proto files will also be |
||||
included. Each invocation will create 8 zip packages: |
||||
dist/<TARGET>-<VERSION_NUMBER>-win32.zip |
||||
dist/<TARGET>-<VERSION_NUMBER>-win64.zip |
||||
dist/<TARGET>-<VERSION_NUMBER>-osx-aarch_64.zip |
||||
dist/<TARGET>-<VERSION_NUMBER>-osx-x86_64.zip |
||||
dist/<TARGET>-<VERSION_NUMBER>-linux-x86_32.zip |
||||
dist/<TARGET>-<VERSION_NUMBER>-linux-x86_64.zip |
||||
dist/<TARGET>-<VERSION_NUMBER>-linux-aarch_64.zip |
||||
dist/<TARGET>-<VERSION_NUMBER>-linux-ppcle_64.zip |
||||
dist/<TARGET>-<VERSION_NUMBER>-linux-s390_64.zip |
||||
EOF |
||||
exit 1 |
||||
fi |
||||
|
||||
TARGET=$1 |
||||
VERSION_NUMBER=$2 |
||||
|
||||
# <zip file name> <binary file name> pairs. |
||||
declare -a FILE_NAMES=( \ |
||||
win32.zip windows-x86_32.exe \ |
||||
win64.zip windows-x86_64.exe \ |
||||
osx-aarch_64.zip osx-aarch_64.exe \ |
||||
osx-x86_64.zip osx-x86_64.exe \ |
||||
linux-x86_32.zip linux-x86_32.exe \ |
||||
linux-x86_64.zip linux-x86_64.exe \ |
||||
linux-aarch_64.zip linux-aarch_64.exe \ |
||||
linux-ppcle_64.zip linux-ppcle_64.exe \ |
||||
linux-s390_64.zip linux-s390_64.exe \ |
||||
) |
||||
|
||||
# List of all well-known types to be included. |
||||
declare -a WELL_KNOWN_TYPES=( \ |
||||
google/protobuf/descriptor.proto \ |
||||
google/protobuf/any.proto \ |
||||
google/protobuf/api.proto \ |
||||
google/protobuf/duration.proto \ |
||||
google/protobuf/empty.proto \ |
||||
google/protobuf/field_mask.proto \ |
||||
google/protobuf/source_context.proto \ |
||||
google/protobuf/struct.proto \ |
||||
google/protobuf/timestamp.proto \ |
||||
google/protobuf/type.proto \ |
||||
google/protobuf/wrappers.proto \ |
||||
google/protobuf/compiler/plugin.proto \ |
||||
) |
||||
|
||||
set -e |
||||
|
||||
# A temporary working directory to put all files. |
||||
DIR=$(mktemp -d) |
||||
|
||||
# Copy over well-known types. |
||||
mkdir -p ${DIR}/include/google/protobuf/compiler |
||||
for PROTO in ${WELL_KNOWN_TYPES[@]}; do |
||||
cp -f ../src/${PROTO} ${DIR}/include/${PROTO} |
||||
done |
||||
|
||||
# Create a readme file. |
||||
cat <<EOF > ${DIR}/readme.txt |
||||
Protocol Buffers - Google's data interchange format |
||||
Copyright 2008 Google Inc. |
||||
https://developers.google.com/protocol-buffers/ |
||||
|
||||
This package contains a precompiled binary version of the protocol buffer |
||||
compiler (protoc). This binary is intended for users who want to use Protocol |
||||
Buffers in languages other than C++ but do not want to compile protoc |
||||
themselves. To install, simply place this binary somewhere in your PATH. |
||||
|
||||
If you intend to use the included well known types then don't forget to |
||||
copy the contents of the 'include' directory somewhere as well, for example |
||||
into '/usr/local/include/'. |
||||
|
||||
Please refer to our official github site for more installation instructions: |
||||
https://github.com/protocolbuffers/protobuf |
||||
EOF |
||||
|
||||
mkdir -p dist |
||||
mkdir -p ${DIR}/bin |
||||
# Create a zip file for each binary. |
||||
for((i=0;i<${#FILE_NAMES[@]};i+=2));do |
||||
ZIP_NAME=${FILE_NAMES[$i]} |
||||
if [ ${ZIP_NAME:0:3} = "win" ]; then |
||||
BINARY="$TARGET.exe" |
||||
else |
||||
BINARY="$TARGET" |
||||
fi |
||||
BINARY_NAME=${FILE_NAMES[$(($i+1))]} |
||||
BINARY_URL=https://repo1.maven.org/maven2/com/google/protobuf/$TARGET/${VERSION_NUMBER}/$TARGET-${VERSION_NUMBER}-${BINARY_NAME} |
||||
if ! wget ${BINARY_URL} -O ${DIR}/bin/$BINARY &> /dev/null; then |
||||
echo "[ERROR] Failed to download ${BINARY_URL}" >&2 |
||||
echo "[ERROR] Skipped $TARGET-${VERSION_NAME}-${ZIP_NAME}" >&2 |
||||
continue |
||||
fi |
||||
TARGET_ZIP_FILE=`pwd`/dist/$TARGET-${VERSION_NUMBER}-${ZIP_NAME} |
||||
pushd $DIR &> /dev/null |
||||
chmod +x bin/$BINARY |
||||
if [ "$TARGET" = "protoc" ]; then |
||||
zip -r ${TARGET_ZIP_FILE} include bin readme.txt &> /dev/null |
||||
else |
||||
zip -r ${TARGET_ZIP_FILE} bin &> /dev/null |
||||
fi |
||||
rm bin/$BINARY |
||||
popd &> /dev/null |
||||
echo "[INFO] Successfully created ${TARGET_ZIP_FILE}" |
||||
done |
@ -1,144 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<parent> |
||||
<groupId>com.google</groupId> |
||||
<artifactId>google</artifactId> |
||||
<version>5</version> |
||||
</parent> |
||||
<groupId>com.google.protobuf</groupId> |
||||
<artifactId>protoc</artifactId> |
||||
<version>3.21.6</version> |
||||
<packaging>pom</packaging> |
||||
<name>Protobuf Compiler</name> |
||||
<description> |
||||
Protobuf Compiler (protoc) is a compiler for .proto files. It generates |
||||
language-specific code for Protobuf messages and RPC interfaces. |
||||
</description> |
||||
<inceptionYear>2008</inceptionYear> |
||||
<url>https://developers.google.com/protocol-buffers/</url> |
||||
<licenses> |
||||
<license> |
||||
<name>BSD-3-Clause</name> |
||||
<url>https://opensource.org/licenses/BSD-3-Clause</url> |
||||
<distribution>repo</distribution> |
||||
</license> |
||||
</licenses> |
||||
<scm> |
||||
<url>https://github.com/protocolbuffers/protobuf</url> |
||||
<connection> |
||||
scm:git:https://github.com/protocolbuffers/protobuf.git |
||||
</connection> |
||||
</scm> |
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.codehaus.mojo</groupId> |
||||
<artifactId>build-helper-maven-plugin</artifactId> |
||||
<version>1.8</version> |
||||
<executions> |
||||
<execution> |
||||
<id>attach-artifacts</id> |
||||
<phase>package</phase> |
||||
<goals> |
||||
<goal>attach-artifact</goal> |
||||
</goals> |
||||
<configuration> |
||||
<artifacts> |
||||
<artifact> |
||||
<file>${basedir}/target/linux/x86_64/protoc.exe</file> |
||||
<classifier>linux-x86_64</classifier> |
||||
<type>exe</type> |
||||
</artifact> |
||||
<artifact> |
||||
<file>${basedir}/target/linux/x86_32/protoc.exe</file> |
||||
<classifier>linux-x86_32</classifier> |
||||
<type>exe</type> |
||||
</artifact> |
||||
<artifact> |
||||
<file>${basedir}/target/windows/x86_64/protoc.exe</file> |
||||
<classifier>windows-x86_64</classifier> |
||||
<type>exe</type> |
||||
</artifact> |
||||
<artifact> |
||||
<file>${basedir}/target/windows/x86_32/protoc.exe</file> |
||||
<classifier>windows-x86_32</classifier> |
||||
<type>exe</type> |
||||
</artifact> |
||||
<artifact> |
||||
<file>${basedir}/target/osx/x86_64/protoc.exe</file> |
||||
<classifier>osx-x86_64</classifier> |
||||
<type>exe</type> |
||||
</artifact> |
||||
<artifact> |
||||
<file>${basedir}/target/osx/aarch_64/protoc.exe</file> |
||||
<classifier>osx-aarch_64</classifier> |
||||
<type>exe</type> |
||||
</artifact> |
||||
<artifact> |
||||
<file>${basedir}/target/linux/aarch_64/protoc.exe</file> |
||||
<classifier>linux-aarch_64</classifier> |
||||
<type>exe</type> |
||||
</artifact> |
||||
<artifact> |
||||
<file>${basedir}/target/linux/ppcle_64/protoc.exe</file> |
||||
<classifier>linux-ppcle_64</classifier> |
||||
<type>exe</type> |
||||
</artifact> |
||||
<artifact> |
||||
<file>${basedir}/target/linux/s390_64/protoc.exe</file> |
||||
<classifier>linux-s390_64</classifier> |
||||
<type>exe</type> |
||||
</artifact> |
||||
</artifacts> |
||||
</configuration> |
||||
</execution> |
||||
</executions> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
<profiles> |
||||
<profile> |
||||
<id>release</id> |
||||
<properties> |
||||
<!-- Specify the staging repository to deploy to. This can be left |
||||
empty for the first deployment, and Sonatype will create one. For |
||||
subsequent deployments it should be set to what Sonatype has |
||||
created, so that all deployments will go to the same repository. |
||||
--> |
||||
<staging.repository/> |
||||
</properties> |
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-gpg-plugin</artifactId> |
||||
<version>1.5</version> |
||||
<executions> |
||||
<execution> |
||||
<id>sign-artifacts</id> |
||||
<phase>verify</phase> |
||||
<goals> |
||||
<goal>sign</goal> |
||||
</goals> |
||||
</execution> |
||||
</executions> |
||||
</plugin> |
||||
<plugin> |
||||
<groupId>org.sonatype.plugins</groupId> |
||||
<artifactId>nexus-staging-maven-plugin</artifactId> |
||||
<version>1.6.3</version> |
||||
<extensions>true</extensions> |
||||
<configuration> |
||||
<serverId>sonatype-nexus-staging</serverId> |
||||
<nexusUrl>https://oss.sonatype.org/</nexusUrl> |
||||
<skipStagingRepositoryClose>true</skipStagingRepositoryClose> |
||||
<autoReleaseAfterClose>false</autoReleaseAfterClose> |
||||
<stagingRepositoryId>${staging.repository}</stagingRepositoryId> |
||||
</configuration> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
</profile> |
||||
</profiles> |
||||
</project> |
@ -1,13 +0,0 @@ |
||||
#!/bin/bash |
||||
set -eu -o pipefail |
||||
|
||||
quote() { |
||||
local arg |
||||
for arg in "$@"; do |
||||
printf "'" |
||||
printf "%s" "$arg" | sed -e "s/'/'\\\\''/g" |
||||
printf "' " |
||||
done |
||||
} |
||||
|
||||
exec scl enable devtoolset-2 "$(quote "$@")" |
Loading…
Reference in new issue