Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .ci/agent-build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash

set -ex

pushd agent

DEST=libsentry_agent_linux-$TARGET.so

cmake CMakeLists.txt
make

mv libsentry_agent.so $DEST
file $DEST

popd
12 changes: 12 additions & 0 deletions .ci/agent-deploy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/bash

set -ex

[[ $TRAVIS_LANGUAGE == "cpp" ]] || (echo "Not a C++ run, exiting." && exit 0;)

pushd agent

pip install --user requests==2.18.2
python ../.ci/agent-upload-release.py

popd
6 changes: 6 additions & 0 deletions .ci/agent-install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/sh

set -ex

sudo apt-get -qq update
sudo apt-get install -y g++-multilib
93 changes: 93 additions & 0 deletions .ci/agent-upload-release.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#!/usr/bin/env python

import os
import sys
import urlparse
import requests

try:
from requests.packages import urllib3
urllib3.disable_warnings()
except ImportError:
pass


AUTH_USERNAME = 'getsentry-bot'
AUTH_TOKEN = os.environ['GITHUB_AUTH_TOKEN']
AUTH = (AUTH_USERNAME, AUTH_TOKEN)
TAG = os.environ.get('TRAVIS_TAG')
TARGET = os.environ.get('TARGET')
LIB = 'libsentry_agent_linux-%(target)s.%(ext)s'
EXT = 'so'
BIN_TYPE = os.environ.get('BIN_TYPE', 'release')
REPO = 'getsentry/sentry-java'


def log(message, *args):
if args:
message = message % args
print >> sys.stderr, message


def api_request(method, path, **kwargs):
url = urlparse.urljoin('https://api.github.com/', path.lstrip('/'))
# default travis python does not have SNI
return requests.request(method, url, auth=AUTH, verify=False, **kwargs)


def find_executable():
path = LIB % {'target': TARGET, 'ext': EXT}
log("Checking for executable: " + path)
if os.path.isfile(path):
return path


def ensure_release():
resp = api_request('GET', 'repos/%s/releases' % REPO)
resp.raise_for_status()
for release in resp.json():
if release['tag_name'] == TAG:
log('Found already existing release %s' % release['id'])
return release
resp = api_request('POST', 'repos/%s/releases' % REPO, json={
'tag_name': TAG,
'name': 'sentry-java-agent %s' % TAG,
'draft': True,
})
resp.raise_for_status()
release = resp.json()
log('Created new release %s' % release['id'])
return release


def upload_asset(release, executable, target_name):
resp = api_request('GET', release['assets_url'])
resp.raise_for_status()
for asset in resp.json():
if asset['name'] == target_name:
log('Already have release asset %s. Skipping' % target_name)
return

upload_url = release['upload_url'].split('{')[0]
with open(executable, 'rb') as f:
log('Creating new release asset %s.' % target_name)
resp = api_request('POST', upload_url,
params={'name': target_name},
headers={'Content-Type': 'application/octet-stream'},
data=f)
resp.raise_for_status()


def main():
if not TAG:
return log('No tag specified. Doing nothing.')
executable = find_executable()
if executable is None:
return log('Could not locate executable. Doing nothing.')

release = ensure_release()
upload_asset(release, executable, executable)


if __name__ == '__main__':
main()
52 changes: 42 additions & 10 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,47 @@
dist: precise
language: java
script: mvn verify
jdk:
- oraclejdk7
- oraclejdk8
cache:
directories:
- $HOME/.m2
env:
global:
- secure: "Xs3g5ZOMymPp0EvxF0T0tk5xMaV3htMPii5uDS17z9wDWYg7hj78mrP2cFea0ZjIqIjENG7YuxIjw34yb7507pvIxv8v+QvSkwlzVz4XJNzh2w1gbB2C+oVvbmbFd0A2Pmpf3jvkey6Tk5jhW7lxNVAZ7QzONuAf66iWdi6bwSg="
- secure: "PBz5Jjoaf33a+Iqv5eJsFHbCYP1ZdeiQvrQBH7hJK5/Kdrbn4GCrDx+RkA58ZC8i8ZHfsW2MkMuD7RphcrgHuB3UwcvHwUgrEZaV1/ypIOe5O8CQ4Z0gkHCj2Ei/dsL3fpDU8WuPJSLa13tsMoQTdGaOhluCuSXpuArx3B3gX28="

after_success:
- "{ [[ $TRAVIS_BRANCH == 'master' ]] || [[ $TRAVIS_BRANCH == raven-*.x ]]; } && { python .travis/addServer.py; mvn clean deploy --settings $HOME/.m2/mySettings.xml; };"
- "[[ $TRAVIS_BRANCH == 'master' ]] && { python .travis/addServer.py; mvn clean deploy --settings $HOME/.m2/mySettings.xml; };"

matrix:
include:
- language: java
dist: precise
jdk: oraclejdk7
script: env | sort && mvn verify
cache:
directories:
- $HOME/.m2
- language: java
dist: precise
jdk: oraclejdk8
script: env | sort && mvn verify
cache:
directories:
- $HOME/.m2
- language: cpp
dist: trusty
jdk: oraclejdk7
env: TARGET=x86_64
before_install: .ci/agent-install.sh
script: .ci/agent-build.sh
cache: false
after_success: true
- language: cpp
dist: trusty
jdk: oraclejdk7
env: TARGET=i686
before_install: .ci/agent-install.sh
script: .ci/agent-build.sh
cache: false
after_success: true

deploy:
provider: script
script: .ci/agent-deploy.sh
skip_cleanup: true
on:
tags: true
9 changes: 8 additions & 1 deletion agent/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
cmake_minimum_required(VERSION 3.7)
cmake_minimum_required(VERSION 3.2)
project(sentry_java_agent)

set(CMAKE_CXX_STANDARD 14)

set(SOURCE_FILES agent.cpp lib.cpp lib.h)
add_library(sentry_agent SHARED ${SOURCE_FILES})

if($ENV{TARGET} MATCHES "i686")
message("Setting target to 32-bit.")
set_target_properties(sentry_agent PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
endif()

include_directories($ENV{JAVA_HOME}/include)

if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
include_directories($ENV{JAVA_HOME}/include/darwin)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
include_directories($ENV{JAVA_HOME}/include/linux)
endif()
1 change: 1 addition & 0 deletions agent/agent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#include "jvmti.h"
#include <iostream>
#include <cstring>
#include "lib.h"

extern Level LOG_LEVEL;
Expand Down