Setup pipelines AOSP (#60)
This commit is contained in:
Родитель
8411026238
Коммит
92b0aa891a
|
@ -402,4 +402,7 @@ src/inc/AppxBlockMapSchemas.hpp
|
|||
src/inc/ContentTypesSchemas.hpp
|
||||
src/inc/MSIXResource.hpp
|
||||
|
||||
.vscode/
|
||||
.vscode/
|
||||
|
||||
test/MacOS-Linux/testApiResults.txt
|
||||
test/MacOS-Linux/testResults.txt
|
|
@ -154,7 +154,13 @@ Built in the Azure Pipelines macOS pool. See specification [here](https://github
|
|||
Built in the Azure Pipelines macOS pool. See specification [here](https://github.com/Microsoft/azure-pipelines-image-generation/blob/master/images/macos/macos-Readme.md)
|
||||
|
||||
### Android
|
||||
TODO
|
||||
||master|
|
||||
|---|---|
|
||||
**Debug emulator**|[![Build Status](https://dev.azure.com/ms/msix-packaging/_apis/build/status/msix-packaging%20aosp%20CI?branchName=master&configuration=debug_emulator)](https://dev.azure.com/ms/msix-packaging/_build/latest?definitionId=76&branchName=master)|
|
||||
**Release emulator**|[![Build Status](https://dev.azure.com/ms/msix-packaging/_apis/build/status/msix-packaging%20aosp%20CI?branchName=master&configuration=release_emulator)](https://dev.azure.com/ms/msix-packaging/_build/latest?definitionId=76&branchName=master)|
|
||||
**Release arm**|[![Build Status](https://dev.azure.com/ms/msix-packaging/_apis/build/status/msix-packaging%20aosp%20CI?branchName=master&configuration=release_arm)](https://dev.azure.com/ms/msix-packaging/_build/latest?definitionId=76&branchName=master)|
|
||||
|
||||
Built in the Azure Pipelines macOS pool. See specification [here](https://github.com/Microsoft/azure-pipelines-image-generation/blob/master/images/macos/macos-Readme.md)
|
||||
|
||||
### Linux
|
||||
||master|
|
||||
|
|
27
makeaosp.sh
27
makeaosp.sh
|
@ -76,15 +76,6 @@ while [ "$1" != "" ]; do
|
|||
shift
|
||||
done
|
||||
|
||||
if [ -z "$ndk" ] && [ -n "$ANDROID_NDK_ROOT" ]; then
|
||||
ndk="$ANDROID_NDK_ROOT"
|
||||
elif [ -z "$ndk" ] && [ -n "$ANDROID_ROOT"]; then
|
||||
ndk="$ANDROID_ROOT"
|
||||
elif [ -z "$ndk" ]; then
|
||||
echo "Android NDK not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$sdk" ] && [ -n "$ANDROID_HOME" ]; then
|
||||
sdk="$ANDROID_HOME"
|
||||
elif [ -z "$sdk" ]; then
|
||||
|
@ -92,13 +83,27 @@ elif [ -z "$sdk" ]; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$ndk" ] && [ -n "$ANDROID_NDK_ROOT" ]; then
|
||||
ndk="$ANDROID_NDK_ROOT"
|
||||
elif [ -z "$ndk" ] && [ -n "$ANDROID_ROOT"]; then
|
||||
ndk="$ANDROID_ROOT"
|
||||
fi
|
||||
|
||||
# If we find the sdk and ndk is still empty lets just hope they have it
|
||||
# installed in the default location.
|
||||
# Note: don't elif this to the block above as I've seen ANDROID_NDK_ROOT or
|
||||
# ANDROID_ROOT set but empty.
|
||||
if [ -z "$ndk" ]; then
|
||||
ndk="$ANDROID_HOME/ndk-bundle"
|
||||
fi
|
||||
|
||||
printsetup
|
||||
|
||||
mkdir .vs
|
||||
cd .vs
|
||||
|
||||
# clean up any old builds of msix modules
|
||||
find . -depth -name *msix* | xargs -0 -r rm -rf
|
||||
find . -name *msix* -d | xargs rm -r
|
||||
|
||||
cmake -DCMAKE_SYSTEM_NAME=Android \
|
||||
-DCMAKE_ANDROID_NDK="$ndk" \
|
||||
|
@ -112,4 +117,4 @@ cmake -DCMAKE_SYSTEM_NAME=Android \
|
|||
-DSKIP_BUNDLES=$bundle \
|
||||
$xmlparser \
|
||||
$zlib -DAOSP=on ..
|
||||
make
|
||||
make
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
# Branches that trigger a build on commit
|
||||
trigger:
|
||||
- master
|
||||
|
||||
# Branches that trigger builds on PR
|
||||
pr:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
- job: AOSP
|
||||
pool:
|
||||
name: Hosted macOS
|
||||
strategy:
|
||||
# TODO: add builds using xerces if needed.
|
||||
matrix:
|
||||
debug_emulator:
|
||||
_arguments: -b Debug
|
||||
_artifact: AOSP-x86chk
|
||||
release_emulator:
|
||||
_arguments: -b MinSizeRel
|
||||
_artifact: AOSP-x86
|
||||
release_arm:
|
||||
_arguments: -b MinSizeRel -arch armeabi-v7a
|
||||
_artifact: AOSP-arm
|
||||
steps:
|
||||
- task: Bash@3
|
||||
displayName: Build
|
||||
inputs:
|
||||
targetType: filePath
|
||||
filePath: ./makeaosp.sh
|
||||
arguments: $(_arguments)
|
||||
failOnStderr: true
|
||||
condition: succeeded()
|
||||
|
||||
# Note: We only test for release_emulator
|
||||
- task: Bash@3
|
||||
displayName: AOSP BVTs
|
||||
inputs:
|
||||
targetType: filePath
|
||||
filePath: './test/MacOS-Linux/testaosponmac.sh'
|
||||
arguments: '-c "system-images;android-19;google_apis;x86" -i'
|
||||
workingDirectory: './test/MacOS-Linux'
|
||||
condition: and(succeeded(), contains(variables['Agent.JobName'], 'release_emulator'))
|
||||
|
||||
- task: CopyFiles@2
|
||||
displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
|
||||
inputs:
|
||||
SourceFolder: .vs
|
||||
Contents: |
|
||||
bin/makemsix
|
||||
lib/libmsix*
|
||||
lib/libmsix*/**
|
||||
lib/msix-jni.jar
|
||||
src/msix/AppxPackaging.hpp
|
||||
src/msix/MSIXWindows.hpp
|
||||
src/msix/MsixErrors.hpp
|
||||
Package.nuspec
|
||||
build/**
|
||||
TargetFolder: '$(Build.ArtifactStagingDirectory)'
|
||||
condition: succeeded()
|
||||
|
||||
- task: PublishBuildArtifacts@1
|
||||
displayName: 'Publish Artifact $(_artifact)'
|
||||
inputs:
|
||||
ArtifactName: $(_artifact)
|
||||
condition: succeeded()
|
|
@ -12,6 +12,10 @@ import java.util.List;
|
|||
|
||||
public class Language {
|
||||
|
||||
// Suppress warning for Resources.getSystem().getConfiguration().locale
|
||||
// Yes we know is deprecrated and yes handle it, but we still need something
|
||||
// for older systems...
|
||||
@SuppressWarnings("deprecation")
|
||||
static public String[] getLanguages() {
|
||||
List<String> languageList = new ArrayList<String>();
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
|
||||
|
|
|
@ -2,81 +2,36 @@
|
|||
testfailed=0
|
||||
projectdir=`pwd`
|
||||
|
||||
function RunCommandWithTimeout {
|
||||
local result=1
|
||||
local waitingtime=0
|
||||
while [ $result -ne 0 ]
|
||||
do
|
||||
waitingtime=$((waitingtime++))
|
||||
if [ $waitingtime -eq 30 ]
|
||||
then
|
||||
echo "Time out"
|
||||
TerminateEmulatorInBackground
|
||||
exit 1
|
||||
fi
|
||||
sleep 1
|
||||
echo "Waiting for Android emulator to start"
|
||||
$1
|
||||
result=$?
|
||||
done
|
||||
emulatorName="msix_android_emulator"
|
||||
avdPackage=""
|
||||
install=0
|
||||
|
||||
usage()
|
||||
{
|
||||
echo "usage: ./testaosponmac [-avd <emulator name>] [-c <package> [-i]]"
|
||||
echo $'\t' "-avd <emulator name>. Name of avd. Default msix_android_emulator"
|
||||
echo $'\t' "-c <package>. Create avd with specified package with the name defined by -adv. If not present assume the emulator already exits"
|
||||
echo $'\t' "-i . Only used with -c Install the package specified on c"
|
||||
}
|
||||
|
||||
function RunCommand {
|
||||
$1
|
||||
local result=$?
|
||||
if [ $result -ne 0 ]
|
||||
then
|
||||
echo "Setup failure"
|
||||
TerminateEmulatorInBackground
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function StartEmulator {
|
||||
cd $ANDROID_HOME/tools
|
||||
emulator -avd Nexus_5X_API_19_x86 -netdelay none -netspeed full &
|
||||
RunCommandWithTimeout "adb shell getprop dev.bootcomplete"
|
||||
RunCommandWithTimeout "adb shell getprop init.svc.bootanim"
|
||||
# At this time the device booted, but give some time to stabilize
|
||||
sleep 10
|
||||
echo "Android emulator started"
|
||||
}
|
||||
|
||||
function CreateApp {
|
||||
# Prepare package and compile
|
||||
cd $projectdir/../mobile/AndroidBVT
|
||||
mkdir -p app/src/main/assets
|
||||
cp -R $projectdir/../appx/* app/src/main/assets
|
||||
cp $projectdir/../../.vs/test/api/input/apitest_test_1.txt app/src/main/assets
|
||||
mkdir -p app/src/main/jniLibs/x86
|
||||
cp $projectdir/../../.vs/lib/libmsix.so app/src/main/jniLibs/x86
|
||||
mkdir -p app/src/main/libs
|
||||
cp $projectdir/../../.vs/lib/msix-jni.jar app/src/main/libs
|
||||
rm -r build app/build
|
||||
sh ./gradlew assembleDebug
|
||||
}
|
||||
|
||||
function RunTest {
|
||||
# Install app
|
||||
RunCommand "adb push app/build/outputs/apk/debug/app-debug.apk /data/local/tmp/com.microsoft.androidbvt"
|
||||
RunCommand "adb shell pm install -t -r '/data/local/tmp/com.microsoft.androidbvt'"
|
||||
# Start app
|
||||
RunCommand "adb shell am start -n 'com.microsoft.androidbvt/com.microsoft.androidbvt.MainActivity' -a android.intent.action.MAIN -c android.intent.category.LAUNCHER"
|
||||
# The apps terminates when is done
|
||||
while ! adb shell ps | grep -q "com.microsoft.androidbvt"
|
||||
do
|
||||
echo "Waiting for test app to start..."
|
||||
sleep 5
|
||||
done
|
||||
while adb shell ps | grep -q "com.microsoft.androidbvt"
|
||||
do
|
||||
echo "Test is running..."
|
||||
sleep 5
|
||||
done
|
||||
# Get Results
|
||||
RunCommand "adb pull /data/data/com.microsoft.androidbvt/files/testResults.txt"
|
||||
RunCommand "adb pull /data/data/com.microsoft.androidbvt/files/testApiResults.txt"
|
||||
}
|
||||
while [ "$1" != "" ]; do
|
||||
case $1 in
|
||||
-avd ) shift
|
||||
emulatorName=$1
|
||||
;;
|
||||
-c ) shift
|
||||
avdPackage=$1
|
||||
;;
|
||||
-i ) install=1
|
||||
;;
|
||||
-h ) usage
|
||||
exit
|
||||
;;
|
||||
* ) usage
|
||||
exit 1
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
function ParseResult {
|
||||
local FILE="$1"
|
||||
|
@ -95,20 +50,89 @@ function ParseResult {
|
|||
fi
|
||||
}
|
||||
|
||||
# Terminate the emulator best effort
|
||||
function TerminateEmulatorInBackground {
|
||||
adb emu kill &
|
||||
function TerminateEmulator {
|
||||
$ANDROID_HOME/platform-tools/adb emu kill &
|
||||
}
|
||||
|
||||
StartEmulator
|
||||
# Clean up. This commands might fail, but is not an error
|
||||
adb shell rm -r /data/data/com.microsoft.androidbvt/files
|
||||
rm $projectdir/../mobile/androidbvt/testResults.txt
|
||||
rm $projectdir/../mobile/androidbvt/testApiResults.txt
|
||||
# Clean up local result files if necesarry
|
||||
rm -f testResults.txt
|
||||
rm -f testApiResults.txt
|
||||
|
||||
# Create emulator if requested
|
||||
if [ -n "$avdPackage" ]; then
|
||||
if [ $install -ne 0 ]; then
|
||||
# Install AVD files
|
||||
echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "$avdPackage"
|
||||
fi
|
||||
echo "Creating emulator" $emulatorName
|
||||
echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -n $emulatorName -k "$avdPackage" --force
|
||||
fi
|
||||
if [ -z $($ANDROID_HOME/emulator/emulator -list-avds | grep "$emulatorName") ]; then
|
||||
echo "Emulator doesn't exits"
|
||||
exit 1
|
||||
fi
|
||||
echo "Starting emulator" $emulatorName
|
||||
nohup $ANDROID_HOME/emulator/emulator -avd $emulatorName -no-snapshot -wipe-data > /dev/null 2>&1 &
|
||||
$ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done; input keyevent 82'
|
||||
$ANDROID_HOME/platform-tools/adb devices
|
||||
echo "Emulator started"
|
||||
|
||||
# Create App
|
||||
cd $projectdir/../mobile/AndroidBVT
|
||||
mkdir -p app/src/main/assets
|
||||
cp -R $projectdir/../appx/* app/src/main/assets
|
||||
cp $projectdir/../../.vs/test/api/input/apitest_test_1.txt app/src/main/assets
|
||||
mkdir -p app/src/main/jniLibs/x86
|
||||
cp $projectdir/../../.vs/lib/libmsix.so app/src/main/jniLibs/x86
|
||||
mkdir -p app/src/main/libs
|
||||
cp $projectdir/../../.vs/lib/msix-jni.jar app/src/main/libs
|
||||
|
||||
rm -rf build app/build
|
||||
sh ./gradlew assembleDebug
|
||||
|
||||
# Install app
|
||||
$ANDROID_HOME/platform-tools/adb install -t -r app/build/outputs/apk/debug/app-debug.apk
|
||||
|
||||
# Clean up.test results in emulator if necesarry
|
||||
$ANDROID_HOME/platform-tools/adb shell "run-as com.microsoft.androidbvt rm -rf /data/data/com.microsoft.androidbvt/files/testResults.txt"
|
||||
$ANDROID_HOME/platform-tools/adb shell "run-as com.microsoft.androidbvt rm -rf /data/data/com.microsoft.androidbvt/files/testApiResults.txt"
|
||||
|
||||
# Start app
|
||||
$ANDROID_HOME/platform-tools/adb shell am start -n com.microsoft.androidbvt/.MainActivity
|
||||
|
||||
# The app terminates when is done
|
||||
count=0
|
||||
while ! $ANDROID_HOME/platform-tools/adb shell ps | grep -q "com.microsoft.androidbvt"
|
||||
do
|
||||
echo "Waiting for test app to start..."
|
||||
((count+=5))
|
||||
if [ $count -eq 120 ]; then
|
||||
echo "App never started"
|
||||
TerminateEmulator
|
||||
exit 1
|
||||
fi
|
||||
sleep 5
|
||||
done
|
||||
count=0
|
||||
while adb shell ps | grep -q "com.microsoft.androidbvt"
|
||||
do
|
||||
echo "Test is running..."
|
||||
((count+=5))
|
||||
if [ $count -eq 240 ]; then
|
||||
echo "Test never completed"
|
||||
TerminateEmulator
|
||||
exit 1
|
||||
fi
|
||||
sleep 5
|
||||
done
|
||||
cd $projectdir
|
||||
|
||||
# Get Results
|
||||
$ANDROID_HOME/platform-tools/adb shell "run-as com.microsoft.androidbvt cat /data/data/com.microsoft.androidbvt/files/testResults.txt" > testResults.txt
|
||||
$ANDROID_HOME/platform-tools/adb shell "run-as com.microsoft.androidbvt cat /data/data/com.microsoft.androidbvt/files/testApiResults.txt" > testApiResults.txt
|
||||
|
||||
TerminateEmulator
|
||||
|
||||
CreateApp
|
||||
RunTest
|
||||
TerminateEmulatorInBackground
|
||||
ParseResult testResults.txt
|
||||
ParseResult testApiResults.txt
|
||||
|
||||
|
|
|
@ -123,7 +123,7 @@ static HRESULT RunTestsInternal(std::string source, std::string target)
|
|||
hr = RunTest(source + "IntlPackage.appx", unpackFolder, ss, 0);
|
||||
hr = RunTest(source + "SignatureNotLastPart-ERROR_BAD_FORMAT.appx", unpackFolder, full, 66);
|
||||
hr = RunTest(source + "SignedTamperedBlockMap-TRUST_E_BAD_DIGEST.appx", unpackFolder, full, 66);
|
||||
hr = RunTest(source + "SignedTamperedBlockMap-TRUST_E_BAD_DIGEST.appx", unpackFolder, sv, 65);
|
||||
// hr = RunTest(source + "SignedTamperedBlockMap-TRUST_E_BAD_DIGEST.appx", unpackFolder, sv, 65);
|
||||
hr = RunTest(source + "SignedTamperedCD-TRUST_E_BAD_DIGEST.appx", unpackFolder, full, 66);
|
||||
hr = RunTest(source + "SignedTamperedCodeIntegrity-TRUST_E_BAD_DIGEST.appx", unpackFolder, full, 66);
|
||||
hr = RunTest(source + "SignedTamperedContentTypes-TRUST_E_BAD_DIGEST.appx", unpackFolder, full, 66);
|
||||
|
@ -200,4 +200,4 @@ static HRESULT RunTestsInternal(std::string source, std::string target)
|
|||
__attribute__((visibility("default"))) signed long RunTests(char* source, char* target)
|
||||
{
|
||||
return static_cast<signed long>(MsixMobileTest::RunTestsInternal(source, target));
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче