Use bazel in appveyor (#612)

+publish jni dll
diff --git a/BUILD b/BUILD
index e4f24cc..6265b71 100644
--- a/BUILD
+++ b/BUILD
@@ -23,6 +23,24 @@
     visibility = ["//visibility:public"],
 )
 
+config_setting(
+    name = "windows",
+    values = {"cpu": "x64_windows"},
+    visibility = ["//visibility:public"],
+)
+
+config_setting(
+    name = "windows_msvc",
+    values = {"cpu": "x64_windows_msvc"},
+    visibility = ["//visibility:public"],
+)
+
+config_setting(
+    name = "windows_msys",
+    values = {"cpu": "x64_windows_msys"},
+    visibility = ["//visibility:public"],
+)
+
 genrule(
     name = "copy_link_jni_header",
     srcs = ["@openjdk_linux//:jni_h"],
@@ -35,6 +53,9 @@
     srcs = select({
         ":darwin": ["@openjdk_macos//:jni_md_h"],
         ":darwin_x86_64": ["@openjdk_macos//:jni_md_h"],
+        ":windows_msys": ["@openjdk_win//:jni_md_h"],
+        ":windows_msvc": ["@openjdk_win//:jni_md_h"],
+        ":windows": ["@openjdk_win//:jni_md_h"],
         "//conditions:default": ["@openjdk_linux//:jni_md_h"],
     }),
     outs = ["jni/jni_md.h"],
diff --git a/WORKSPACE b/WORKSPACE
index 31dc5dd..e30edc0 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -26,33 +26,59 @@
 
 new_http_archive(
     name = "openjdk_linux",
-    url = "https://bazel-mirror.storage.googleapis.com/openjdk/azul-zulu-8.20.0.5-jdk8.0.121/zulu8.20.0.5-jdk8.0.121-linux_x64.tar.gz",
-    sha256 = "7fdfb17d890406470b2303d749d3138e7f353749e67a0a22f542e1ab3e482745",
+    urls = [
+        "https://mirror.bazel.build/openjdk/azul-zulu-8.23.0.3-jdk8.0.144/zulu8.23.0.3-jdk8.0.144-linux_x64.tar.gz",
+        "https://bazel-mirror.storage.googleapis.com/openjdk/azul-zulu-8.23.0.3-jdk8.0.144/zulu8.23.0.3-jdk8.0.144-linux_x64.tar.gz",
+        "https://cdn.azul.com/zulu/bin/zulu8.23.0.3-jdk8.0.144-linux_x64.tar.gz",
+    ],
+    sha256 = "7e6284739c0e5b7142bc7a9adc61ced70dc5bb26b130b582b18e809013bcb251",
     build_file_content = """
 package(
     default_visibility = ["//visibility:public"],
 )
 filegroup(
     name = "jni_h",
-    srcs = ["zulu8.20.0.5-jdk8.0.121-linux_x64/include/jni.h"],
+    srcs = ["zulu8.23.0.3-jdk8.0.144-linux_x64/include/jni.h"],
 )
 filegroup(
     name = "jni_md_h",
-    srcs = ["zulu8.20.0.5-jdk8.0.121-linux_x64/include/linux/jni_md.h"],
+    srcs = ["zulu8.23.0.3-jdk8.0.144-linux_x64/include/linux/jni_md.h"],
 )""",
 )
 
 new_http_archive(
     name = "openjdk_macos",
-    url = "https://bazel-mirror.storage.googleapis.com/openjdk/azul-zulu-8.20.0.5-jdk8.0.121/zulu8.20.0.5-jdk8.0.121-macosx_x64.zip",
-    sha256 = "2a58bd1d9b0cbf0b3d8d1bcdd117c407e3d5a0ec01e2f53565c9bec5cf9ea78b",
+    urls = [
+        "https://mirror.bazel.build/openjdk/azul-zulu-8.23.0.3-jdk8.0.144/zulu8.23.0.3-jdk8.0.144-macosx_x64.zip",
+        "https://bazel-mirror.storage.googleapis.com/openjdk/azul-zulu-8.23.0.3-jdk8.0.144/zulu8.23.0.3-jdk8.0.144-macosx_x64.zip",
+        "https://cdn.azul.com/zulu/bin/zulu8.23.0.3-jdk8.0.144-macosx_x64.zip",
+    ],
+    sha256 = "ff533364c9cbd3b271ab5328efe28e2dd6d7bae5b630098a5683f742ecf0709d",
     build_file_content = """
 package(
     default_visibility = ["//visibility:public"],
 )
 filegroup(
     name = "jni_md_h",
-    srcs = ["zulu8.20.0.5-jdk8.0.121-macosx_x64/include/darwin/jni_md.h"],
+    srcs = ["zulu8.23.0.3-jdk8.0.144-macosx_x64/include/darwin/jni_md.h"],
+)""",
+)
+
+new_http_archive(
+    name = "openjdk_win",
+    urls = [
+        "https://mirror.bazel.build/openjdk/azul-zulu-8.23.0.3-jdk8.0.144/zulu8.23.0.3-jdk8.0.144-win_x64.zip",
+        "https://bazel-mirror.storage.googleapis.com/openjdk/azul-zulu-8.23.0.3-jdk8.0.144/zulu8.23.0.3-jdk8.0.144-win_x64.zip",
+        "https://cdn.azul.com/zulu/bin/zulu8.23.0.3-jdk8.0.144-win_x64.zip",
+    ],
+    sha256 = "f1d9d3341ef7c8c9baff3597953e99a6a7c64f8608ee62c03fdd7574b7655c02",
+    build_file_content = """
+package(
+    default_visibility = ["//visibility:public"],
+)
+filegroup(
+    name = "jni_md_h",
+    srcs = ["zulu8.23.0.3-jdk8.0.144-win_x64/include/win32/jni_md.h"],
 )""",
 )
 
diff --git a/scripts/appveyor.yml b/scripts/appveyor.yml
index 2c98f19..a825b22 100644
--- a/scripts/appveyor.yml
+++ b/scripts/appveyor.yml
@@ -26,6 +26,8 @@
   - BUILD_SYSTEM: make

     ARCH: "x86_64"

 

+  - BUILD_SYSTEM: bazel

+

 install:

 - IF "%BUILD_SYSTEM%"=="Python" (

     SET "PATH=%PYTHON%;%PYTHON%\Scripts;%PATH%" &&

@@ -39,14 +41,17 @@
       SET "TOOLCHAIN=x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64"

     )

   )

+- IF "%BUILD_SYSTEM%"=="bazel" (

+    appveyor DownloadFile https://github.com/bazelbuild/bazel/releases/download/0.6.1/bazel-0.6.1-windows-x86_64.exe -FileName bazel.exe

+  )

 

 before_build:

+- FOR /f %%i in ('C:\cygwin64\bin\date.exe +%%Y-%%m-%%d') DO SET "RELEASE_DATE=%%i"

 - IF "%BUILD_SYSTEM%"=="CMake" ( mkdir builddir && cd builddir && cmake -G "%GENERATOR%" .. )

 - IF "%BUILD_SYSTEM%"=="make" (

     SET "CC=gcc" &&

     SET "PATH=C:\mingw-w64\%TOOLCHAIN%\bin;%PATH%" &&

-    COPY C:\msys64\usr\bin\make.exe C:\mingw-w64\%TOOLCHAIN%\bin\make.exe &&

-    FOR /f %%i in ('C:\cygwin64\bin\date.exe +%%Y-%%m-%%d') DO SET "RELEASE_DATE=%%i"

+    COPY C:\msys64\usr\bin\make.exe C:\mingw-w64\%TOOLCHAIN%\bin\make.exe

   )

 

 build_script:

@@ -57,11 +62,18 @@
     cd bin && 7z a -tzip -mx9 brotli-win-%ARCH%-%RELEASE_DATE%.zip brotli.exe &&

     appveyor PushArtifact brotli-win-%ARCH%-%RELEASE_DATE%.zip && cd ..

   )

+- IF "%BUILD_SYSTEM%"=="bazel" (

+    bazel --batch build -c opt java/org/brotli/wrapper/...:all &&

+    python scripts/fix-win-bazel-build.py &&

+    cd bazel-bin && 7z a -tzip -mx9 brotli-win-bazel-jni-%RELEASE_DATE%.zip brotli_jni.dll &&

+    appveyor PushArtifact brotli-win-bazel-jni-%RELEASE_DATE%.zip && cd ..

+  )

 

 test_script:

 - IF "%BUILD_SYSTEM%"=="CMake" ( ctest --output-on-failure --interactive-debug-mode 0 -C Debug )

 - IF "%BUILD_SYSTEM%"=="Python" ( python setup.py test )

 - IF "%BUILD_SYSTEM%"=="make" ( sh -c "make test" )

+- IF "%BUILD_SYSTEM%"=="bazel" ( bazel --batch test -c opt --test_output streamed java/org/brotli/wrapper/...:all )

 

 deploy:

 - provider: BinTray

diff --git a/scripts/fix-win-bazel-build.py b/scripts/fix-win-bazel-build.py
new file mode 100644
index 0000000..fcba6f3
--- /dev/null
+++ b/scripts/fix-win-bazel-build.py
@@ -0,0 +1,31 @@
+import fnmatch
+import os
+import os.path
+from shutil import copyfile
+
+matches = []
+for root, dirnames, filenames in os.walk('bazel-bin\\java\\org\\brotli'):
+  for filename in fnmatch.filter(filenames, '*.runfiles_manifest'):
+    matches.append(os.path.join(root, filename))
+
+for match in matches:
+  runfiles = match[:-len('_manifest')]
+  with open(match) as manifest:
+    for entry in manifest:
+      entry = entry.strip()
+      if not entry.startswith("org_brotli"):
+        continue
+      if entry.startswith('org_brotli/external'):
+        continue
+      (alias, space, link) = entry.partition(' ')
+      if alias.endswith('.jar') or alias.endswith('.exe'):
+        continue
+      link = link.replace('/', '\\')
+      alias = alias.replace('/', '\\')
+      dst = os.path.join(runfiles, alias)
+      if not os.path.exists(dst):
+        print(link + ' -> ' + dst)
+        parent = os.path.dirname(dst)
+        if not os.path.exists(parent):
+          os.makedirs(parent)
+        copyfile(link, dst)