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/ContentTypesSchemas.hpp
|
||||||
src/inc/MSIXResource.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)
|
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
|
### 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
|
### Linux
|
||||||
||master|
|
||master|
|
||||||
|
|
27
makeaosp.sh
27
makeaosp.sh
|
@ -76,15 +76,6 @@ while [ "$1" != "" ]; do
|
||||||
shift
|
shift
|
||||||
done
|
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
|
if [ -z "$sdk" ] && [ -n "$ANDROID_HOME" ]; then
|
||||||
sdk="$ANDROID_HOME"
|
sdk="$ANDROID_HOME"
|
||||||
elif [ -z "$sdk" ]; then
|
elif [ -z "$sdk" ]; then
|
||||||
|
@ -92,13 +83,27 @@ elif [ -z "$sdk" ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
printsetup
|
||||||
|
|
||||||
mkdir .vs
|
mkdir .vs
|
||||||
cd .vs
|
cd .vs
|
||||||
|
|
||||||
# clean up any old builds of msix modules
|
# 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 \
|
cmake -DCMAKE_SYSTEM_NAME=Android \
|
||||||
-DCMAKE_ANDROID_NDK="$ndk" \
|
-DCMAKE_ANDROID_NDK="$ndk" \
|
||||||
|
@ -112,4 +117,4 @@ cmake -DCMAKE_SYSTEM_NAME=Android \
|
||||||
-DSKIP_BUNDLES=$bundle \
|
-DSKIP_BUNDLES=$bundle \
|
||||||
$xmlparser \
|
$xmlparser \
|
||||||
$zlib -DAOSP=on ..
|
$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 {
|
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() {
|
static public String[] getLanguages() {
|
||||||
List<String> languageList = new ArrayList<String>();
|
List<String> languageList = new ArrayList<String>();
|
||||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
|
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
|
||||||
|
|
|
@ -2,81 +2,36 @@
|
||||||
testfailed=0
|
testfailed=0
|
||||||
projectdir=`pwd`
|
projectdir=`pwd`
|
||||||
|
|
||||||
function RunCommandWithTimeout {
|
emulatorName="msix_android_emulator"
|
||||||
local result=1
|
avdPackage=""
|
||||||
local waitingtime=0
|
install=0
|
||||||
while [ $result -ne 0 ]
|
|
||||||
do
|
usage()
|
||||||
waitingtime=$((waitingtime++))
|
{
|
||||||
if [ $waitingtime -eq 30 ]
|
echo "usage: ./testaosponmac [-avd <emulator name>] [-c <package> [-i]]"
|
||||||
then
|
echo $'\t' "-avd <emulator name>. Name of avd. Default msix_android_emulator"
|
||||||
echo "Time out"
|
echo $'\t' "-c <package>. Create avd with specified package with the name defined by -adv. If not present assume the emulator already exits"
|
||||||
TerminateEmulatorInBackground
|
echo $'\t' "-i . Only used with -c Install the package specified on c"
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
sleep 1
|
|
||||||
echo "Waiting for Android emulator to start"
|
|
||||||
$1
|
|
||||||
result=$?
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function RunCommand {
|
while [ "$1" != "" ]; do
|
||||||
$1
|
case $1 in
|
||||||
local result=$?
|
-avd ) shift
|
||||||
if [ $result -ne 0 ]
|
emulatorName=$1
|
||||||
then
|
;;
|
||||||
echo "Setup failure"
|
-c ) shift
|
||||||
TerminateEmulatorInBackground
|
avdPackage=$1
|
||||||
exit 1
|
;;
|
||||||
fi
|
-i ) install=1
|
||||||
}
|
;;
|
||||||
|
-h ) usage
|
||||||
function StartEmulator {
|
exit
|
||||||
cd $ANDROID_HOME/tools
|
;;
|
||||||
emulator -avd Nexus_5X_API_19_x86 -netdelay none -netspeed full &
|
* ) usage
|
||||||
RunCommandWithTimeout "adb shell getprop dev.bootcomplete"
|
exit 1
|
||||||
RunCommandWithTimeout "adb shell getprop init.svc.bootanim"
|
esac
|
||||||
# At this time the device booted, but give some time to stabilize
|
shift
|
||||||
sleep 10
|
done
|
||||||
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"
|
|
||||||
}
|
|
||||||
|
|
||||||
function ParseResult {
|
function ParseResult {
|
||||||
local FILE="$1"
|
local FILE="$1"
|
||||||
|
@ -95,20 +50,89 @@ function ParseResult {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Terminate the emulator best effort
|
function TerminateEmulator {
|
||||||
function TerminateEmulatorInBackground {
|
$ANDROID_HOME/platform-tools/adb emu kill &
|
||||||
adb emu kill &
|
|
||||||
}
|
}
|
||||||
|
|
||||||
StartEmulator
|
# Clean up local result files if necesarry
|
||||||
# Clean up. This commands might fail, but is not an error
|
rm -f testResults.txt
|
||||||
adb shell rm -r /data/data/com.microsoft.androidbvt/files
|
rm -f testApiResults.txt
|
||||||
rm $projectdir/../mobile/androidbvt/testResults.txt
|
|
||||||
rm $projectdir/../mobile/androidbvt/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 testResults.txt
|
||||||
ParseResult testApiResults.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 + "IntlPackage.appx", unpackFolder, ss, 0);
|
||||||
hr = RunTest(source + "SignatureNotLastPart-ERROR_BAD_FORMAT.appx", unpackFolder, full, 66);
|
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, 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 + "SignedTamperedCD-TRUST_E_BAD_DIGEST.appx", unpackFolder, full, 66);
|
||||||
hr = RunTest(source + "SignedTamperedCodeIntegrity-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);
|
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)
|
__attribute__((visibility("default"))) signed long RunTests(char* source, char* target)
|
||||||
{
|
{
|
||||||
return static_cast<signed long>(MsixMobileTest::RunTestsInternal(source, target));
|
return static_cast<signed long>(MsixMobileTest::RunTestsInternal(source, target));
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче