Permalink
Browse files

Add Pants build tool (#709)

  • Loading branch information...
wisechengyi authored and alexarchambault committed Dec 11, 2017
1 parent 930ac74 commit 1296459de3312f63f7c40a54ff19c3ec5ff09be3
View
@@ -53,6 +53,11 @@ matrix:
- env: SCALA_VERSION=2.10.6 SCALA_JS=1
os: linux
jdk: oraclejdk8
- os: linux
jdk: oraclejdk8
script:
# Sanity check for Pants build path.
- ./pants run cli/src/main/scala-2.11:coursier-cli -- fetch --help
env:
global:
- secure: miHFMwVRD/yjOLy794nOwc2lJTMyL5O0MXABT9ksg5ejQy1FrFVc2YH86Agp80W02/lGLGl0qWCiK1TBcs9q4Apt01nkD1a/0/iuTRm//bdhnu8BbRxFITf+2cyYJVytKPsF585aHldMv1rwZs3TDaTzEEecAEki5r50yyTVo7ycG0lVj9aVWXerKRMIT54Wb8M6nqbyRB1jGWT0ETNU13vOvQznPTUXQG5hsiKnGYRf8T3umOMdOHpV0rvdwYqAIMsikaAFcYCS5P/pLXMtmRHICH9KUG8TV/ST07p1BXtbBg9y1Q+lpnXotXh4ZNoWOp8B6v7fxJ/WlLYTDROWCiHJ4s2V4Di00db/nW4OWrEEBlrh7vJ/npZqyt9V9YeNv6alxi+DCESwusgvD4Cx5c3zh+2X6RB6BYwWHlFnd80rmsLe4R4fFUcc8E/ZR9vUFjP1CsQKqfJ5yfKR6V+n8jK8FjLpoaU9PHPo2H4V3FZM/fCLcxhE37vfaYI7/O7MqE/cdGpZIuz7g3c4toWCgNZJDn8iJCPmrgcbW5zbfDxvWU2K816ycgnUwSQ5dufrJpAbLNrjR1O8EPRkMDDp9bB7/4RVQvfDfP9GGoiHPHHgxGzY0Lf5bm+Bj1mRfB5/SXHd3IjhUCD9q7eD1/ANifEYALC5BJ4TB8RhQUPU8uM=
View
@@ -0,0 +1,171 @@
# This file should match the 3rdparty jars in project/Deps.scala
jar_library(
name = "scala-xml",
jars = [
scala_jar(
name = "scala-xml",
org = "org.scala-lang.modules",
rev = "1.0.6",
),
],
)
jar_library(
name = "quasiQuotes",
jars = [
scala_jar(
name = "quasiquotes",
org = "org.scalamacros",
rev = "2.1.0",
),
],
)
jar_library(
name = "fastParse",
jars = [
scala_jar(
name = "fastparse",
org = "com.lihaoyi",
rev = "1.0.0",
),
],
)
jar_library(
name = "scalaz-concurrent",
jars = [
scala_jar(
name = "scalaz-concurrent",
org = "org.scalaz",
rev = "7.2.16",
),
],
)
jar_library(
name = "scalaz-core",
jars = [
scala_jar(
name = "scalaz-core",
org = "org.scalaz",
rev = "7.2.16",
),
],
)
jar_library(
name = "jsoup",
jars = [jar(
name = "jsoup",
org = "org.jsoup",
rev = "1.10.3",
)],
)
SCALAJS_REV = "0.9.3"
jar_library(
name = "cli",
jars = [
scala_jar(
name = "scalajs-cli",
org = "org.scala-js",
rev = SCALAJS_REV,
),
],
)
jar_library(
name = "compiler",
jars = [
jar(
name = "scalajs-compiler_2.11.8",
org = "org.scala-js",
rev = SCALAJS_REV,
),
],
)
jar_library(
name = "library",
jars = [
scala_jar(
name = "scalajs-library",
org = "org.scala-js",
rev = SCALAJS_REV,
),
],
)
jar_library(
name = "dom",
jars = [
scala_jar(
name = "scalajs-dom_sjs0.6",
org = "org.scala-js",
rev = "0.9.1",
),
],
)
jar_library(
name = "jackson-module-scala",
jars = [
scala_jar(
name = "jackson-module-scala",
org = "com.fasterxml.jackson.module",
rev = "2.8.4",
),
],
)
jar_library(
name = "caseapp",
jars = [
scala_jar(
name = "case-app",
org = "com.github.alexarchambault",
rev = "1.1.3",
),
],
)
jar_library(
name = "argonaut-shapeless",
jars = [
scala_jar(
name = "argonaut-shapeless_6.2",
org = "com.github.alexarchambault",
rev = "1.2.0-M6",
),
],
)
jar_library(
name = "soc",
jars = [
jar(
name = "directories",
org = "io.github.soc",
rev = "5",
),
],
)
jar_library(
name = "scala-native",
jars = [
jar(
name = "nativelib_native0.3_2.11",
org = "org.scala-native",
rev = "0.3.3",
),
jar(
name = "tools_2.11",
org = "io.get-coursier.scala-native",
rev = "0.3.0-coursier-1",
),
],
)
View
@@ -137,3 +137,23 @@ Then run the proxy ITs with
```
$ sbt ++2.12.4 proxy-tests/it:test
```
### Build with Pants
[Pants](https://github.com/pantsbuild/pants) build tool is also added to an experimental path to build the software
Currently only the CLI command can be built via Pants with Scala 2.11.11.
To iterate on code changes:
```
./pants run cli/src/main/scala-2.11:coursier-cli -- fetch --help
```
To build a distributable binary
```
./pants run cli/src/main/scala-2.11:coursier-cli
# Artifact will be placed under dist/
java -jar dist/coursier-cli.jar fetch --help
```
@@ -0,0 +1,9 @@
scala_library(
name = "cache",
dependencies = [
"core:core",
"3rdparty/jvm:scalaz-concurrent",
"paths/src/main/java:paths",
],
sources = rglobs("*.scala"),
)
@@ -0,0 +1,21 @@
scala_library(
name = "cli",
dependencies = [
"3rdparty/jvm:argonaut-shapeless",
"3rdparty/jvm:caseapp",
"core:core",
"cache/src/main/scala:cache",
"extra/src/main/scala/coursier/extra:extra",
"extra/src/main/scala-2.11/coursier/extra:native",
],
sources = rglobs("*.scala"),
)
jvm_binary(
name = "coursier-cli",
basename = "coursier-cli",
dependencies = [
":cli",
],
main = "coursier.cli.Coursier",
)
View
@@ -0,0 +1,12 @@
scala_library(
name = "core",
dependencies = [
"3rdparty/jvm:fastParse",
"3rdparty/jvm:scalaz-core",
"3rdparty/jvm:jsoup",
# TODO(wisechengyi) for some reason there is no compile error
# and this is needed at runtime.
"3rdparty/jvm:scala-xml",
],
sources = rglobs("jvm/*.scala", "shared/*.scala"),
)
@@ -6,11 +6,16 @@ object Properties {
private lazy val props = {
val p = new JProperties()
p.load(
getClass
.getClassLoader
.getResourceAsStream("coursier/coursier.properties")
)
try {
p.load(
getClass
.getClassLoader
.getResourceAsStream("coursier/coursier.properties")
)
}
catch {
case e: NullPointerException =>
}
p
}
@@ -0,0 +1,8 @@
scala_library(
name = "native",
dependencies = [
"3rdparty/jvm:scala-native",
"core:core",
],
sources = rglobs("*.scala"),
)
@@ -0,0 +1,7 @@
scala_library(
name = "extra",
dependencies = [
"core:core",
],
sources = rglobs("*.scala"),
)
View
102 pants
@@ -0,0 +1,102 @@
#!/usr/bin/env bash
# Copyright 2015 Pants project contributors (see CONTRIBUTORS.md).
# Licensed under the Apache License, Version 2.0 (see LICENSE).
# =============================== NOTE ===============================
# This pants bootstrap script comes from the pantsbuild/setup
# project and is intended to be checked into your code repository so
# that any developer can check out your code and be building it with
# pants with no prior setup needed.
#
# You can learn more here: https://pantsbuild.github.io/setup
# ====================================================================
set -e
PYTHON=${PYTHON:-$(which python2.7)}
PANTS_HOME="${PANTS_HOME:-${HOME}/.cache/pants/setup}"
PANTS_BOOTSTRAP="${PANTS_HOME}/bootstrap-$(uname -s)-$(uname -m)"
VENV_VERSION=15.0.2
# This requirement is installed before pantsbuild.pants to hack around
# interpreters that have newer setuptools already installed, effectively
# re-installing an older setuptools and pinning low to a version known to be
# ingestable by both pants and pex for all reasonable versions of pants.
# See:
# https://github.com/pantsbuild/pants/issues/3948
# https://github.com/pantsbuild/setup/issues/14
# https://github.com/pantsbuild/setup/issues/19
SETUPTOOLS_REQUIREMENT="setuptools==5.4.1"
VENV_PACKAGE=virtualenv-${VENV_VERSION}
VENV_TARBALL=${VENV_PACKAGE}.tar.gz
# The high-level flow:
# 1.) Grab pants version from pants.ini or default to latest.
# 2.) Check for a venv via a naming/path convention and execute if found.
# 3.) Otherwise create venv and re-exec self.
#
# After that pants itself will handle making sure any requested plugins
# are installed and up to date.
function tempdir {
mktemp -d "$1"/pants.XXXXXX
}
# TODO(John Sirois): GC race loser tmp dirs leftover from bootstrap_XXX
# functions. Any tmp dir w/o a symlink pointing to it can go.
function bootstrap_venv {
if [[ ! -d "${PANTS_BOOTSTRAP}/${VENV_PACKAGE}" ]]
then
(
mkdir -p "${PANTS_BOOTSTRAP}" && \
staging_dir=$(tempdir "${PANTS_BOOTSTRAP}") && \
cd "${staging_dir}" && \
curl -LO https://pypi.io/packages/source/v/virtualenv/${VENV_TARBALL} && \
tar -xzf ${VENV_TARBALL} && \
ln -s "${staging_dir}/${VENV_PACKAGE}" "${staging_dir}/latest" && \
mv "${staging_dir}/latest" "${PANTS_BOOTSTRAP}/${VENV_PACKAGE}"
) 1>&2
fi
echo "${PANTS_BOOTSTRAP}/${VENV_PACKAGE}"
}
function bootstrap_pants {
pants_requirement="pantsbuild.pants"
pants_version=$(
grep -E "^[[:space:]]*pants_version" pants.ini 2>/dev/null | \
cut -f2 -d: | tr -d " "
)
if [[ -n "${pants_version}" ]]
then
pants_requirement="${pants_requirement}==${pants_version}"
else
pants_version="unspecified"
fi
if [[ ! -d "${PANTS_BOOTSTRAP}/${pants_version}" ]]
then
(
# NB: We setup the virtualenv with no setuptools to ensure our
# ${SETUPTOOLS_REQUIREMENT} wins.
venv_path="$(bootstrap_venv)" && \
staging_dir=$(tempdir "${PANTS_BOOTSTRAP}") && \
"${PYTHON}" "${venv_path}/virtualenv.py" --no-setuptools --no-download \
"${staging_dir}/install" && \
"${staging_dir}/install/bin/python" \
"${staging_dir}/install/bin/pip" install \
"${SETUPTOOLS_REQUIREMENT}" && \
"${staging_dir}/install/bin/python" \
"${staging_dir}/install/bin/pip" install \
"${pants_requirement}" && \
ln -s "${staging_dir}/install" "${staging_dir}/${pants_version}" && \
mv "${staging_dir}/${pants_version}" "${PANTS_BOOTSTRAP}/${pants_version}"
) 1>&2
fi
echo "${PANTS_BOOTSTRAP}/${pants_version}"
}
pants_dir=$(bootstrap_pants) && \
exec "${pants_dir}/bin/python" "${pants_dir}/bin/pants" "$@"
Oops, something went wrong.

0 comments on commit 1296459

Please sign in to comment.