29 changed files with 572 additions and 35 deletions
-
0.ci/scripts/.gitkeep
-
15.ci/scripts/common/post-upload.sh
-
6.ci/scripts/common/pre-upload.sh
-
6.ci/scripts/format/docker.sh
-
4.ci/scripts/format/exec.sh
-
37.ci/scripts/format/script.sh
-
14.ci/scripts/linux/docker.sh
-
5.ci/scripts/linux/exec.sh
-
14.ci/scripts/linux/upload.sh
-
28.ci/scripts/merge/apply-patches-by-label.py
-
18.ci/scripts/merge/check-label-presence.py
-
2.ci/scripts/merge/yuzubot-git-config.sh
-
50.ci/scripts/windows/docker.sh
-
5.ci/scripts/windows/exec.sh
-
106.ci/scripts/windows/scan_dll.py
-
13.ci/scripts/windows/upload.sh
-
21.ci/templates/build-single.yml
-
22.ci/templates/build-standard.yml
-
30.ci/templates/build-testing.yml
-
14.ci/templates/format-check.yml
-
46.ci/templates/merge.yml
-
15.ci/templates/mergebot.yml
-
29.ci/templates/release.yml
-
16.ci/templates/retrieve-artifact-source.yml
-
11.ci/templates/retrieve-master-source.yml
-
7.ci/templates/sync-source.yml
-
32.ci/yuzu-mainline.yml
-
18.ci/yuzu-verify.yml
-
19.ci/yuzu.yml
@ -0,0 +1,15 @@ |
|||||
|
#!/bin/bash -ex |
||||
|
|
||||
|
# Copy documentation |
||||
|
cp license.txt "$REV_NAME" |
||||
|
cp README.md "$REV_NAME" |
||||
|
|
||||
|
tar $COMPRESSION_FLAGS "$ARCHIVE_NAME" "$REV_NAME" |
||||
|
|
||||
|
mv "$REV_NAME" $RELEASE_NAME |
||||
|
|
||||
|
7z a "$REV_NAME.7z" $RELEASE_NAME |
||||
|
|
||||
|
# move the compiled archive into the artifacts directory to be uploaded by travis releases |
||||
|
mv "$ARCHIVE_NAME" artifacts/ |
||||
|
mv "$REV_NAME.7z" artifacts/ |
||||
@ -0,0 +1,6 @@ |
|||||
|
#!/bin/bash -ex |
||||
|
|
||||
|
GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`" |
||||
|
GITREV="`git show -s --format='%h'`" |
||||
|
|
||||
|
mkdir -p artifacts |
||||
@ -0,0 +1,6 @@ |
|||||
|
#!/bin/bash -ex |
||||
|
|
||||
|
# Run clang-format |
||||
|
cd /yuzu |
||||
|
chmod a+x ./.ci/scripts/format/script.sh |
||||
|
./.ci/scripts/format/script.sh |
||||
@ -0,0 +1,4 @@ |
|||||
|
#!/bin/bash -ex |
||||
|
|
||||
|
chmod a+x ./.ci/scripts/format/docker.sh |
||||
|
docker run -v $(pwd):/yuzu yuzuemu/build-environments:linux-clang-format /bin/bash -ex /yuzu/.ci/scripts/format/docker.sh |
||||
@ -0,0 +1,37 @@ |
|||||
|
#!/bin/bash -ex |
||||
|
|
||||
|
if grep -nrI '\s$' src *.yml *.txt *.md Doxyfile .gitignore .gitmodules .ci* dist/*.desktop \ |
||||
|
dist/*.svg dist/*.xml; then |
||||
|
echo Trailing whitespace found, aborting |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
# Default clang-format points to default 3.5 version one |
||||
|
CLANG_FORMAT=clang-format-6.0 |
||||
|
$CLANG_FORMAT --version |
||||
|
|
||||
|
if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then |
||||
|
# Get list of every file modified in this pull request |
||||
|
files_to_lint="$(git diff --name-only --diff-filter=ACMRTUXB $TRAVIS_COMMIT_RANGE | grep '^src/[^.]*[.]\(cpp\|h\)$' || true)" |
||||
|
else |
||||
|
# Check everything for branch pushes |
||||
|
files_to_lint="$(find src/ -name '*.cpp' -or -name '*.h')" |
||||
|
fi |
||||
|
|
||||
|
# Turn off tracing for this because it's too verbose |
||||
|
set +x |
||||
|
|
||||
|
for f in $files_to_lint; do |
||||
|
d=$(diff -u "$f" <($CLANG_FORMAT "$f") || true) |
||||
|
if ! [ -z "$d" ]; then |
||||
|
echo "!!! $f not compliant to coding style, here is the fix:" |
||||
|
echo "$d" |
||||
|
fail=1 |
||||
|
fi |
||||
|
done |
||||
|
|
||||
|
set -x |
||||
|
|
||||
|
if [ "$fail" = 1 ]; then |
||||
|
exit 1 |
||||
|
fi |
||||
@ -0,0 +1,14 @@ |
|||||
|
#!/bin/bash -ex |
||||
|
|
||||
|
cd /yuzu |
||||
|
|
||||
|
ccache -s |
||||
|
|
||||
|
mkdir build || true && cd build |
||||
|
cmake .. -G Ninja -DYUZU_USE_BUNDLED_UNICORN=ON -DYUZU_USE_QT_WEB_ENGINE=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/lib/ccache/gcc -DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++ -DYUZU_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON |
||||
|
|
||||
|
ninja |
||||
|
|
||||
|
ccache -s |
||||
|
|
||||
|
ctest -VV -C Release |
||||
@ -0,0 +1,5 @@ |
|||||
|
#!/bin/bash -ex |
||||
|
|
||||
|
mkdir -p "ccache" || true |
||||
|
chmod a+x ./.ci/scripts/linux/docker.sh |
||||
|
docker run -e ENABLE_COMPATIBILITY_REPORTING -e CCACHE_DIR=/yuzu/ccache -v $(pwd):/yuzu yuzuemu/build-environments:linux-fresh /bin/bash /yuzu/.ci/scripts/linux/docker.sh |
||||
@ -0,0 +1,14 @@ |
|||||
|
#!/bin/bash -ex |
||||
|
|
||||
|
. .ci/scripts/common/pre-upload.sh |
||||
|
|
||||
|
REV_NAME="yuzu-linux-${GITDATE}-${GITREV}" |
||||
|
ARCHIVE_NAME="${REV_NAME}.tar.xz" |
||||
|
COMPRESSION_FLAGS="-cJvf" |
||||
|
|
||||
|
mkdir "$REV_NAME" |
||||
|
|
||||
|
cp build/bin/yuzu-cmd "$REV_NAME" |
||||
|
cp build/bin/yuzu "$REV_NAME" |
||||
|
|
||||
|
. .ci/scripts/common/post-upload.sh |
||||
@ -0,0 +1,28 @@ |
|||||
|
# Download all pull requests as patches that match a specific label |
||||
|
# Usage: python download-patches-by-label.py <Label to Match> <Root Path Folder to DL to> |
||||
|
|
||||
|
import requests, sys, json, urllib3.request, shutil, subprocess |
||||
|
|
||||
|
http = urllib3.PoolManager() |
||||
|
dl_list = {} |
||||
|
|
||||
|
def check_individual(labels): |
||||
|
for label in labels: |
||||
|
if (label["name"] == sys.argv[1]): |
||||
|
return True |
||||
|
return False |
||||
|
|
||||
|
try: |
||||
|
url = 'https://api.github.com/repos/yuzu-emu/yuzu/pulls' |
||||
|
response = requests.get(url) |
||||
|
if (response.ok): |
||||
|
j = json.loads(response.content) |
||||
|
for pr in j: |
||||
|
if (check_individual(pr["labels"])): |
||||
|
pn = pr["number"] |
||||
|
print("Matched PR# %s" % pn) |
||||
|
print(subprocess.check_output(["git", "fetch", "https://github.com/yuzu-emu/yuzu.git", "pull/%s/head:pr-%s" % (pn, pn), "-f"])) |
||||
|
print(subprocess.check_output(["git", "merge", "--squash", "pr-%s" % pn])) |
||||
|
print(subprocess.check_output(["git", "commit", "-m\"Merge PR %s\"" % pn])) |
||||
|
except: |
||||
|
sys.exit(-1) |
||||
@ -0,0 +1,18 @@ |
|||||
|
# Checks to see if the specified pull request # has the specified tag |
||||
|
# Usage: python check-label-presence.py <Pull Request ID> <Name of Label> |
||||
|
|
||||
|
import requests, json, sys |
||||
|
|
||||
|
try: |
||||
|
url = 'https://api.github.com/repos/yuzu-emu/yuzu/issues/%s' % sys.argv[1] |
||||
|
response = requests.get(url) |
||||
|
if (response.ok): |
||||
|
j = json.loads(response.content) |
||||
|
for label in j["labels"]: |
||||
|
if label["name"] == sys.argv[2]: |
||||
|
print('##vso[task.setvariable variable=enabletesting;]true') |
||||
|
sys.exit() |
||||
|
except: |
||||
|
sys.exit(-1) |
||||
|
|
||||
|
print('##vso[task.setvariable variable=enabletesting;]false') |
||||
@ -0,0 +1,2 @@ |
|||||
|
git config --global user.email "yuzu@yuzu-emu.org" |
||||
|
git config --global user.name "yuzubot" |
||||
@ -0,0 +1,50 @@ |
|||||
|
#!/bin/bash -ex |
||||
|
|
||||
|
cd /yuzu |
||||
|
|
||||
|
ccache -s |
||||
|
|
||||
|
# Dirty hack to trick unicorn makefile into believing we are in a MINGW system |
||||
|
mv /bin/uname /bin/uname1 && echo -e '#!/bin/sh\necho MINGW64' >> /bin/uname |
||||
|
chmod +x /bin/uname |
||||
|
|
||||
|
# Dirty hack to trick unicorn makefile into believing we have cmd |
||||
|
echo '' >> /bin/cmd |
||||
|
chmod +x /bin/cmd |
||||
|
|
||||
|
mkdir build || true && cd build |
||||
|
cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE="$(pwd)/../CMakeModules/MinGWCross.cmake" -DUSE_CCACHE=ON -DYUZU_USE_BUNDLED_UNICORN=ON -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DCMAKE_BUILD_TYPE=Release |
||||
|
ninja |
||||
|
|
||||
|
# Clean up the dirty hacks |
||||
|
rm /bin/uname && mv /bin/uname1 /bin/uname |
||||
|
rm /bin/cmd |
||||
|
|
||||
|
ccache -s |
||||
|
|
||||
|
echo "Tests skipped" |
||||
|
#ctest -VV -C Release |
||||
|
|
||||
|
echo 'Prepare binaries...' |
||||
|
cd .. |
||||
|
mkdir package |
||||
|
|
||||
|
QT_PLATFORM_DLL_PATH='/usr/x86_64-w64-mingw32/lib/qt5/plugins/platforms/' |
||||
|
find build/ -name "yuzu*.exe" -exec cp {} 'package' \; |
||||
|
|
||||
|
# copy Qt plugins |
||||
|
mkdir package/platforms |
||||
|
cp "${QT_PLATFORM_DLL_PATH}/qwindows.dll" package/platforms/ |
||||
|
cp -rv "${QT_PLATFORM_DLL_PATH}/../mediaservice/" package/ |
||||
|
cp -rv "${QT_PLATFORM_DLL_PATH}/../imageformats/" package/ |
||||
|
rm -f package/mediaservice/*d.dll |
||||
|
|
||||
|
for i in package/*.exe; do |
||||
|
# we need to process pdb here, however, cv2pdb |
||||
|
# does not work here, so we just simply strip all the debug symbols |
||||
|
x86_64-w64-mingw32-strip "${i}" |
||||
|
done |
||||
|
|
||||
|
pip3 install pefile |
||||
|
python3 .ci/scripts/windows/scan_dll.py package/*.exe "package/" |
||||
|
python3 .ci/scripts/windows/scan_dll.py package/imageformats/*.dll "package/" |
||||
@ -0,0 +1,5 @@ |
|||||
|
#!/bin/bash -ex |
||||
|
|
||||
|
mkdir -p "ccache" || true |
||||
|
chmod a+x ./.ci/scripts/windows/docker.sh |
||||
|
docker run -e CCACHE_DIR=/yuzu/ccache -v $(pwd):/yuzu yuzuemu/build-environments:linux-mingw /bin/bash -ex /yuzu/.ci/scripts/windows/docker.sh |
||||
@ -0,0 +1,106 @@ |
|||||
|
import pefile |
||||
|
import sys |
||||
|
import re |
||||
|
import os |
||||
|
import queue |
||||
|
import shutil |
||||
|
|
||||
|
# constant definitions |
||||
|
KNOWN_SYS_DLLS = ['WINMM.DLL', 'MSVCRT.DLL', 'VERSION.DLL', 'MPR.DLL', |
||||
|
'DWMAPI.DLL', 'UXTHEME.DLL', 'DNSAPI.DLL', 'IPHLPAPI.DLL'] |
||||
|
# below is for Ubuntu 18.04 with specified PPA enabled, if you are using |
||||
|
# other distro or different repositories, change the following accordingly |
||||
|
DLL_PATH = [ |
||||
|
'/usr/x86_64-w64-mingw32/bin/', |
||||
|
'/usr/x86_64-w64-mingw32/lib/', |
||||
|
'/usr/lib/gcc/x86_64-w64-mingw32/7.3-posix/' |
||||
|
] |
||||
|
|
||||
|
missing = [] |
||||
|
|
||||
|
|
||||
|
def parse_imports(file_name): |
||||
|
results = [] |
||||
|
pe = pefile.PE(file_name, fast_load=True) |
||||
|
pe.parse_data_directories() |
||||
|
|
||||
|
for entry in pe.DIRECTORY_ENTRY_IMPORT: |
||||
|
current = entry.dll.decode() |
||||
|
current_u = current.upper() # b/c Windows is often case insensitive |
||||
|
# here we filter out system dlls |
||||
|
# dll w/ names like *32.dll are likely to be system dlls |
||||
|
if current_u.upper() not in KNOWN_SYS_DLLS and not re.match(string=current_u, pattern=r'.*32\.DLL'): |
||||
|
results.append(current) |
||||
|
|
||||
|
return results |
||||
|
|
||||
|
|
||||
|
def parse_imports_recursive(file_name, path_list=[]): |
||||
|
q = queue.Queue() # create a FIFO queue |
||||
|
# file_name can be a string or a list for the convience |
||||
|
if isinstance(file_name, str): |
||||
|
q.put(file_name) |
||||
|
elif isinstance(file_name, list): |
||||
|
for i in file_name: |
||||
|
q.put(i) |
||||
|
full_list = [] |
||||
|
while q.qsize(): |
||||
|
current = q.get_nowait() |
||||
|
print('> %s' % current) |
||||
|
deps = parse_imports(current) |
||||
|
# if this dll does not have any import, ignore it |
||||
|
if not deps: |
||||
|
continue |
||||
|
for dep in deps: |
||||
|
# the dependency already included in the list, skip |
||||
|
if dep in full_list: |
||||
|
continue |
||||
|
# find the requested dll in the provided paths |
||||
|
full_path = find_dll(dep) |
||||
|
if not full_path: |
||||
|
missing.append(dep) |
||||
|
continue |
||||
|
full_list.append(dep) |
||||
|
q.put(full_path) |
||||
|
path_list.append(full_path) |
||||
|
return full_list |
||||
|
|
||||
|
|
||||
|
def find_dll(name): |
||||
|
for path in DLL_PATH: |
||||
|
for root, _, files in os.walk(path): |
||||
|
for f in files: |
||||
|
if name.lower() == f.lower(): |
||||
|
return os.path.join(root, f) |
||||
|
|
||||
|
|
||||
|
def deploy(name, dst, dry_run=False): |
||||
|
dlls_path = [] |
||||
|
parse_imports_recursive(name, dlls_path) |
||||
|
for dll_entry in dlls_path: |
||||
|
if not dry_run: |
||||
|
shutil.copy(dll_entry, dst) |
||||
|
else: |
||||
|
print('[Dry-Run] Copy %s to %s' % (dll_entry, dst)) |
||||
|
print('Deploy completed.') |
||||
|
return dlls_path |
||||
|
|
||||
|
|
||||
|
def main(): |
||||
|
if len(sys.argv) < 3: |
||||
|
print('Usage: %s [files to examine ...] [target deploy directory]') |
||||
|
return 1 |
||||
|
to_deploy = sys.argv[1:-1] |
||||
|
tgt_dir = sys.argv[-1] |
||||
|
if not os.path.isdir(tgt_dir): |
||||
|
print('%s is not a directory.' % tgt_dir) |
||||
|
return 1 |
||||
|
print('Scanning dependencies...') |
||||
|
deploy(to_deploy, tgt_dir) |
||||
|
if missing: |
||||
|
print('Following DLLs are not found: %s' % ('\n'.join(missing))) |
||||
|
return 0 |
||||
|
|
||||
|
|
||||
|
if __name__ == '__main__': |
||||
|
main() |
||||
@ -0,0 +1,13 @@ |
|||||
|
#!/bin/bash -ex |
||||
|
|
||||
|
. .ci/scripts/common/pre-upload.sh |
||||
|
|
||||
|
REV_NAME="yuzu-windows-mingw-${GITDATE}-${GITREV}" |
||||
|
ARCHIVE_NAME="${REV_NAME}.tar.gz" |
||||
|
COMPRESSION_FLAGS="-czvf" |
||||
|
|
||||
|
mkdir "$REV_NAME" |
||||
|
# get around the permission issues |
||||
|
cp -r package/* "$REV_NAME" |
||||
|
|
||||
|
. .ci/scripts/common/post-upload.sh |
||||
@ -0,0 +1,21 @@ |
|||||
|
parameters: |
||||
|
artifactSource: 'true' |
||||
|
|
||||
|
steps: |
||||
|
- task: DockerInstaller@0 |
||||
|
displayName: 'Prepare Environment' |
||||
|
inputs: |
||||
|
dockerVersion: '17.09.0-ce' |
||||
|
- task: CacheBeta@0 |
||||
|
displayName: 'Cache Build System' |
||||
|
inputs: |
||||
|
key: yuzu-v1-$(BuildName)-$(BuildSuffix)-$(CacheSuffix) |
||||
|
path: $(System.DefaultWorkingDirectory)/ccache |
||||
|
cacheHitVar: CACHE_RESTORED |
||||
|
- script: chmod a+x ./.ci/scripts/$(ScriptFolder)/exec.sh && ./.ci/scripts/$(ScriptFolder)/exec.sh |
||||
|
displayName: 'Build' |
||||
|
- script: chmod a+x ./.ci/scripts/$(ScriptFolder)/upload.sh && ./.ci/scripts/$(ScriptFolder)/upload.sh |
||||
|
displayName: 'Package Artifacts' |
||||
|
- publish: artifacts |
||||
|
artifact: 'yuzu-$(BuildName)-$(BuildSuffix)' |
||||
|
displayName: 'Upload Artifacts' |
||||
@ -0,0 +1,22 @@ |
|||||
|
jobs: |
||||
|
- job: build |
||||
|
displayName: 'standard' |
||||
|
pool: |
||||
|
vmImage: ubuntu-latest |
||||
|
strategy: |
||||
|
maxParallel: 10 |
||||
|
matrix: |
||||
|
windows: |
||||
|
BuildSuffix: 'windows-mingw' |
||||
|
ScriptFolder: 'windows' |
||||
|
linux: |
||||
|
BuildSuffix: 'linux' |
||||
|
ScriptFolder: 'linux' |
||||
|
steps: |
||||
|
- template: ./sync-source.yml |
||||
|
parameters: |
||||
|
artifactSource: $(parameters.artifactSource) |
||||
|
needSubmodules: 'true' |
||||
|
- template: ./build-single.yml |
||||
|
parameters: |
||||
|
artifactSource: 'false' |
||||
@ -0,0 +1,30 @@ |
|||||
|
jobs: |
||||
|
- job: build_test |
||||
|
displayName: 'testing' |
||||
|
pool: |
||||
|
vmImage: ubuntu-latest |
||||
|
strategy: |
||||
|
maxParallel: 10 |
||||
|
matrix: |
||||
|
windows: |
||||
|
BuildSuffix: 'windows-testing' |
||||
|
ScriptFolder: 'windows' |
||||
|
steps: |
||||
|
- task: PythonScript@0 |
||||
|
condition: eq(variables['Build.Reason'], 'PullRequest') |
||||
|
displayName: 'Determine Testing Status' |
||||
|
inputs: |
||||
|
scriptSource: 'filePath' |
||||
|
scriptPath: '../scripts/merge/check-label-presence.py' |
||||
|
arguments: '$(System.PullRequest.PullRequestNumber) create-testing-build' |
||||
|
- ${{ if eq(variables.enabletesting, 'true') }}: |
||||
|
- template: ./sync-source.yml |
||||
|
parameters: |
||||
|
artifactSource: $(parameters.artifactSource) |
||||
|
needSubmodules: 'true' |
||||
|
- template: ./mergebot.yml |
||||
|
parameters: |
||||
|
matchLabel: 'testing-merge' |
||||
|
- template: ./build-single.yml |
||||
|
parameters: |
||||
|
artifactSource: 'false' |
||||
@ -0,0 +1,14 @@ |
|||||
|
parameters: |
||||
|
artifactSource: 'true' |
||||
|
|
||||
|
steps: |
||||
|
- template: ./sync-source.yml |
||||
|
parameters: |
||||
|
artifactSource: $(parameters.artifactSource) |
||||
|
needSubmodules: 'false' |
||||
|
- task: DockerInstaller@0 |
||||
|
displayName: 'Prepare Environment' |
||||
|
inputs: |
||||
|
dockerVersion: '17.09.0-ce' |
||||
|
- script: chmod a+x ./.ci/scripts/format/exec.sh && ./.ci/scripts/format/exec.sh |
||||
|
displayName: 'Verify Formatting' |
||||
@ -0,0 +1,46 @@ |
|||||
|
jobs: |
||||
|
- job: merge |
||||
|
displayName: 'pull requests' |
||||
|
steps: |
||||
|
- checkout: self |
||||
|
submodules: recursive |
||||
|
- template: ./mergebot.yml |
||||
|
parameters: |
||||
|
matchLabel: '$(BuildName)-merge' |
||||
|
- task: ArchiveFiles@2 |
||||
|
displayName: 'Package Source' |
||||
|
inputs: |
||||
|
rootFolderOrFile: '$(System.DefaultWorkingDirectory)' |
||||
|
includeRootFolder: false |
||||
|
archiveType: '7z' |
||||
|
archiveFile: '$(Build.ArtifactStagingDirectory)/yuzu-$(BuildName)-source.7z' |
||||
|
- task: PublishPipelineArtifact@1 |
||||
|
displayName: 'Upload Artifacts' |
||||
|
inputs: |
||||
|
targetPath: '$(Build.ArtifactStagingDirectory)/yuzu-$(BuildName)-source.7z' |
||||
|
artifact: 'yuzu-$(BuildName)-source' |
||||
|
replaceExistingArchive: true |
||||
|
- job: upload_source |
||||
|
displayName: 'upload' |
||||
|
dependsOn: merge |
||||
|
steps: |
||||
|
- template: ./sync-source.yml |
||||
|
parameters: |
||||
|
artifactSource: 'true' |
||||
|
needSubmodules: 'true' |
||||
|
- script: chmod a+x $(System.DefaultWorkingDirectory)/.ci/scripts/merge/yuzubot-git-config.sh && $(System.DefaultWorkingDirectory)/.ci/scripts/merge/yuzubot-git-config.sh |
||||
|
displayName: 'Apply Git Configuration' |
||||
|
- script: git tag -a $(BuildName)-$(Build.BuildId) -m "yuzu $(BuildName) $(Build.BuildNumber) $(Build.DefinitionName)" |
||||
|
displayName: 'Tag Source' |
||||
|
- script: git remote add other $(GitRepoPushChangesURL) |
||||
|
displayName: 'Register Repository' |
||||
|
- script: git push --follow-tags --force other HEAD:$(GitPushBranch) |
||||
|
displayName: 'Update Code' |
||||
|
- script: git rev-list -n 1 $(BuildName)-$(Build.BuildId) > $(Build.ArtifactStagingDirectory)/tag-commit.sha |
||||
|
displayName: 'Calculate Release Point' |
||||
|
- task: PublishPipelineArtifact@1 |
||||
|
displayName: 'Upload Release Point' |
||||
|
inputs: |
||||
|
targetPath: '$(Build.ArtifactStagingDirectory)/tag-commit.sha' |
||||
|
artifact: 'yuzu-$(BuildName)-release-point' |
||||
|
replaceExistingArchive: true |
||||
@ -0,0 +1,15 @@ |
|||||
|
parameters: |
||||
|
matchLabel: 'dummy-merge' |
||||
|
|
||||
|
steps: |
||||
|
- script: mkdir $(System.DefaultWorkingDirectory)/patches && pip install requests urllib3 |
||||
|
displayName: 'Prepare Environment' |
||||
|
- script: chmod a+x $(System.DefaultWorkingDirectory)/.ci/scripts/merge/yuzubot-git-config.sh && $(System.DefaultWorkingDirectory)/.ci/scripts/merge/yuzubot-git-config.sh |
||||
|
displayName: 'Apply Git Configuration' |
||||
|
- task: PythonScript@0 |
||||
|
displayName: 'Discover, Download, and Apply Patches' |
||||
|
inputs: |
||||
|
scriptSource: 'filePath' |
||||
|
scriptPath: '.ci/scripts/merge/apply-patches-by-label.py' |
||||
|
arguments: '${{ parameters.matchLabel }} patches' |
||||
|
workingDirectory: '$(System.DefaultWorkingDirectory)' |
||||
@ -0,0 +1,29 @@ |
|||||
|
steps: |
||||
|
- task: DownloadPipelineArtifact@2 |
||||
|
displayName: 'Download Windows Release' |
||||
|
inputs: |
||||
|
artifactName: 'yuzu-$(BuildName)-windows-mingw' |
||||
|
buildType: 'current' |
||||
|
targetPath: '$(Build.ArtifactStagingDirectory)' |
||||
|
- task: DownloadPipelineArtifact@2 |
||||
|
displayName: 'Download Linux Release' |
||||
|
inputs: |
||||
|
artifactName: 'yuzu-$(BuildName)-linux' |
||||
|
buildType: 'current' |
||||
|
targetPath: '$(Build.ArtifactStagingDirectory)' |
||||
|
- task: DownloadPipelineArtifact@2 |
||||
|
displayName: 'Download Release Point' |
||||
|
inputs: |
||||
|
artifactName: 'yuzu-$(BuildName)-release-point' |
||||
|
buildType: 'current' |
||||
|
targetPath: '$(Build.ArtifactStagingDirectory)' |
||||
|
- script: echo '##vso[task.setvariable variable=tagcommit]' && cat $(Build.ArtifactStagingDirectory)/tag-commit.sha |
||||
|
displayName: 'Calculate Release Point' |
||||
|
- task: GitHubRelease@0 |
||||
|
inputs: |
||||
|
gitHubConnection: $(GitHubReleaseConnectionName) |
||||
|
repositoryName: '$(GitHubReleaseRepoName)' |
||||
|
action: 'create' |
||||
|
target: $(variables.tagcommit) |
||||
|
title: 'yuzu $(BuildName) #$(Build.BuildId)' |
||||
|
assets: '$(Build.ArtifactStagingDirectory)/*' |
||||
@ -0,0 +1,16 @@ |
|||||
|
steps: |
||||
|
- checkout: none |
||||
|
- task: DownloadPipelineArtifact@2 |
||||
|
displayName: 'Download Source' |
||||
|
inputs: |
||||
|
artifactName: 'yuzu-$(BuildName)-source' |
||||
|
buildType: 'current' |
||||
|
targetPath: '$(Build.ArtifactStagingDirectory)' |
||||
|
- script: rm -rf $(System.DefaultWorkingDirectory) && mkdir $(System.DefaultWorkingDirectory) |
||||
|
displayName: 'Clean Working Directory' |
||||
|
- task: ExtractFiles@1 |
||||
|
displayName: 'Prepare Source' |
||||
|
inputs: |
||||
|
archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/*.7z' |
||||
|
destinationFolder: '$(System.DefaultWorkingDirectory)' |
||||
|
cleanDestinationFolder: false |
||||
@ -0,0 +1,11 @@ |
|||||
|
parameters: |
||||
|
needSubmodules: 'true' |
||||
|
|
||||
|
steps: |
||||
|
- checkout: self |
||||
|
displayName: 'Checkout Recursive' |
||||
|
submodules: recursive |
||||
|
# condition: eq(parameters.needSubmodules, 'true') |
||||
|
#- checkout: self |
||||
|
# displayName: 'Checkout Fast' |
||||
|
# condition: ne(parameters.needSubmodules, 'true') |
||||
@ -0,0 +1,7 @@ |
|||||
|
steps: |
||||
|
- ${{ if eq(parameters.artifactSource, 'true') }}: |
||||
|
- template: ./retrieve-artifact-source.yml |
||||
|
- ${{ if ne(parameters.artifactSource, 'true') }}: |
||||
|
- template: ./retrieve-master-source.yml |
||||
|
parameters: |
||||
|
needSubmodules: $(parameters.needSubmodules) |
||||
@ -1,19 +1,23 @@ |
|||||
# Starter pipeline |
|
||||
# Start with a minimal pipeline that you can customize to build and deploy your code. |
|
||||
# Add steps that build, run tests, deploy, and more: |
|
||||
# https://aka.ms/yaml |
|
||||
|
|
||||
trigger: |
trigger: |
||||
- master |
- master |
||||
|
|
||||
|
stages: |
||||
|
- stage: merge |
||||
|
displayName: 'merge' |
||||
|
jobs: |
||||
|
- template: ./templates/merge.yml |
||||
|
- stage: format |
||||
|
dependsOn: merge |
||||
|
displayName: 'format' |
||||
|
jobs: |
||||
|
- job: format |
||||
|
displayName: 'clang' |
||||
pool: |
pool: |
||||
vmImage: 'ubuntu-latest' |
|
||||
|
|
||||
|
vmImage: ubuntu-latest |
||||
steps: |
steps: |
||||
- script: echo Hello, world! |
|
||||
displayName: 'Run a one-line script' |
|
||||
|
|
||||
- script: | |
|
||||
echo Add other tasks to build, test, and deploy your project. |
|
||||
echo See https://aka.ms/yaml |
|
||||
displayName: 'Run a multi-line script' |
|
||||
|
- template: ./templates/format-check.yml |
||||
|
- stage: build |
||||
|
displayName: 'build' |
||||
|
dependsOn: format |
||||
|
jobs: |
||||
|
- template: ./templates/build-standard.yml |
||||
@ -0,0 +1,18 @@ |
|||||
|
stages: |
||||
|
- stage: format |
||||
|
displayName: 'format' |
||||
|
jobs: |
||||
|
- job: format |
||||
|
displayName: 'clang' |
||||
|
pool: |
||||
|
vmImage: ubuntu-latest |
||||
|
steps: |
||||
|
- template: ./templates/format-check.yml |
||||
|
parameters: |
||||
|
artifactSource: 'false' |
||||
|
- stage: build |
||||
|
displayName: 'build' |
||||
|
dependsOn: format |
||||
|
jobs: |
||||
|
- template: ./templates/build-standard.yml |
||||
|
- template: ./templates/build-testing.yml |
||||
@ -1,19 +0,0 @@ |
|||||
# Starter pipeline |
|
||||
# Start with a minimal pipeline that you can customize to build and deploy your code. |
|
||||
# Add steps that build, run tests, deploy, and more: |
|
||||
# https://aka.ms/yaml |
|
||||
|
|
||||
trigger: |
|
||||
- master |
|
||||
|
|
||||
pool: |
|
||||
vmImage: 'ubuntu-latest' |
|
||||
|
|
||||
steps: |
|
||||
- script: echo Hello, world! |
|
||||
displayName: 'Run a one-line script' |
|
||||
|
|
||||
- script: | |
|
||||
echo Add other tasks to build, test, and deploy your project. |
|
||||
echo See https://aka.ms/yaml |
|
||||
displayName: 'Run a multi-line script' |
|
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue