aws/hhvm1/lambdas/test.py (834 lines of code) (raw):
#!/usr/bin/python3 -W ignore
#
# Copyright (c) 2017-present, Facebook, Inc.
# All rights reserved.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
from datetime import date, timedelta
import unittest
from unittest.mock import patch
import activities
import check_if_repos_changed
import check_for_failures
from common import Config
import get_platforms_for_version
import health_check
import normalize_results
import parse_input
import prepare_activity
class Test(unittest.TestCase):
maxDiff = None
def test_parse_input(self):
debian = 'debian-9-stretch'
ubuntu = 'ubuntu-19.04-disco'
macos = next(iter(Config.macos_versions))
self.assertEqual(
parse_input.lambda_handler({}),
{
'buildInput': {
'versions': [date.today().strftime('%Y.%m.%d')],
'platforms': [],
'activities': [],
'debug': '',
},
},
)
self.assertEqual(
parse_input.lambda_handler({
'foo': ['4.2', 'a', '1.2a'],
'bar': {'foo': '0.42.0', 'bar': 'MakeBinaryPackage'},
'baz': '42',
}),
{
'buildInput': {
'versions': ['0.42.0'],
'platforms': [],
'activities': ['MakeBinaryPackage'],
'debug': '',
},
},
)
self.assertEqual(
parse_input.lambda_handler({'inputs': ['--fake-ec2']}),
{
'buildInput': {
'versions': [date.today().strftime('%Y.%m.%d')],
'platforms': [],
'activities': [],
'debug': 'fake_ec2',
},
},
)
self.assertEqual(
parse_input.lambda_handler(
f'4.26.1 {macos} foo {ubuntu} --skip-ec2 {debian}'
),
{
'buildInput': {
'versions': ['4.26.1'],
'platforms': [macos, ubuntu, debian],
'activities': [],
'debug': 'skip_ec2',
},
},
)
# --test also forces the correct step names
self.assertEqual(
parse_input.lambda_handler('4.42.4242 --test-build'),
{
'buildInput': {
'versions': ['4.42.4242'],
'platforms': [],
'activities': ['MakeBinaryPackage', 'BuildAndPublishMacOS'],
'debug': 'test_build',
},
},
)
self.assertEqual(
parse_input.lambda_handler('4.42.4242 test MakeBinaryPackage'),
{
'buildInput': {
'versions': ['4.42.4242'],
'platforms': [],
'activities': ['MakeBinaryPackage'],
'debug': 'test_build',
},
},
)
with self.assertRaisesRegex(
Exception,
'^PublishSourceTarball is not a valid test build step$'
):
parse_input.lambda_handler('4.42.4242 --test PublishSourceTarball')
def test_get_platforms_for_version(self):
self.assertEqual(
get_platforms_for_version.lambda_handler(
{'version': '4.26.1', 'buildInput': {'platforms': []}},
),
[
'debian-8-jessie',
'debian-9-stretch',
'debian-10-buster',
'ubuntu-16.04-xenial',
'ubuntu-18.04-bionic',
'ubuntu-18.10-cosmic',
'ubuntu-19.04-disco',
],
)
self.assertEqual(
get_platforms_for_version.lambda_handler(
{'version': '3.30.11', 'buildInput': {'platforms': []}},
),
[
'debian-8-jessie',
'debian-9-stretch',
'ubuntu-14.04-trusty',
'ubuntu-16.04-xenial',
'ubuntu-18.04-bionic',
'ubuntu-18.10-cosmic',
],
)
self.assertEqual(
get_platforms_for_version.lambda_handler({
'version': '4.26.1',
'buildInput': {'platforms': ['ubuntu-19.04-disco', 'debian-10-buster']},
}),
['debian-10-buster', 'ubuntu-19.04-disco'],
)
# incompatible platforms are excluded
input = {'platforms': ['ubuntu-20.04-focal', 'ubuntu-14.04-trusty']}
self.assertEqual(
get_platforms_for_version.lambda_handler(
{'version': '2019.10.10', 'buildInput': input}
),
['ubuntu-20.04-focal'],
)
self.assertEqual(
get_platforms_for_version.lambda_handler(
{'version': '3.30', 'buildInput': input}
),
['ubuntu-14.04-trusty'],
)
def test_ec2_params(self):
ec2_params = activities.MakeBinaryPackage(
{'version': '4.26.1', 'platform': 'ubuntu-18.04-bionic'}
).ec2_params()
self.assertEqual(ec2_params['MinCount'], 1)
self.assertEqual(ec2_params['InstanceType'], 'r6i.4xlarge')
self.assertEqual(
ec2_params['BlockDeviceMappings'][0]['DeviceName'],
'/dev/sda1',
)
org = Config.override_org or 'hhvm'
branch = Config.override_branch or 'master'
expected_prefix = (
'#!/bin/bash\n'
' ACTIVITY_ARN="arn:aws:states:us-west-2:223121549624:activity:'
'hhvm-make-binary-package"\n'
f' SCRIPT_URL="https://raw.githubusercontent.com/{org}/packaging/'
f'{branch}/aws/userdata/make-binary-package.sh"\n'
' INIT_URL=""\n'
f' AFTER_TASK_URL="https://raw.githubusercontent.com/{org}/packaging/'
f'{branch}/aws/hhvm1/worker/after-task/make-binary-package.sh"\n'
' \n'
' #!/bin/bash\n'
)
self.assertEqual(
ec2_params['UserData'][:len(expected_prefix)],
expected_prefix,
)
# has INIT_URL
ec2_params = activities.PublishBinaryPackages({}).ec2_params()
expected_prefix = (
'#!/bin/bash\n'
' ACTIVITY_ARN="arn:aws:states:us-west-2:223121549624:activity:'
'hhvm-publish-binary-packages"\n'
f' SCRIPT_URL="https://raw.githubusercontent.com/{org}/packaging/'
f'{branch}/aws/userdata/update-repos.sh"\n'
f' INIT_URL="https://raw.githubusercontent.com/{org}/packaging/'
f'{branch}/aws/hhvm1/worker/init/update-repos.sh"\n'
' AFTER_TASK_URL=""\n'
' \n'
' #!/bin/bash\n'
)
self.assertEqual(
ec2_params['UserData'][:len(expected_prefix)],
expected_prefix
)
# overrides worker_env()
ec2_params = activities.BuildAndPublishMacOS({}).ec2_params()
expected_prefix = (
'#!/bin/bash\n'
' ACTIVITY_ARN="arn:aws:states:us-west-2:223121549624:activity:'
'hhvm-build-and-publish-macos"\n'
f' SCRIPT_URL="https://raw.githubusercontent.com/{org}/packaging/'
f'{branch}/aws/userdata/trigger-macos-builds.sh"\n'
' INIT_URL=""\n'
' AFTER_TASK_URL=""\n'
' SKIP_SEND_TASK_SUCCESS="1"\n'
' #!/bin/bash\n'
)
self.assertEqual(
ec2_params['UserData'][:len(expected_prefix)],
expected_prefix
)
# fake_ec2 (should change SCRIPT_URL and remove AFTER_TASK_URL)
ec2_params = activities.MakeBinaryPackage({
'buildInput': {'debug': 'fake_ec2'},
'version': '4.26.1',
'platform': 'ubuntu-18.04-bionic',
}).ec2_params()
expected_prefix = (
'#!/bin/bash\n'
' ACTIVITY_ARN="arn:aws:states:us-west-2:223121549624:activity:'
'hhvm-make-binary-package"\n'
f' SCRIPT_URL="https://raw.githubusercontent.com/{org}/packaging/'
f'{branch}/aws/hhvm1/worker/dummy-task.sh"\n'
' INIT_URL=""\n'
f' AFTER_TASK_URL=""\n'
' \n'
' #!/bin/bash\n'
)
self.assertEqual(
ec2_params['UserData'][:len(expected_prefix)],
expected_prefix,
)
# fake_ec2 (should change SCRIPT_URL and remove INIT_URL)
ec2_params = activities.PublishBinaryPackages(
{'buildInput': {'debug': 'fake_ec2'}}
).ec2_params()
expected_prefix = (
'#!/bin/bash\n'
' ACTIVITY_ARN="arn:aws:states:us-west-2:223121549624:activity:'
'hhvm-publish-binary-packages"\n'
f' SCRIPT_URL="https://raw.githubusercontent.com/{org}/packaging/'
f'{branch}/aws/hhvm1/worker/dummy-task.sh"\n'
' INIT_URL=""\n'
' AFTER_TASK_URL=""\n'
' \n'
' #!/bin/bash\n'
)
self.assertEqual(
ec2_params['UserData'][:len(expected_prefix)],
expected_prefix
)
# fake_ec2 (should change SCRIPT_URL and remove SKIP_SEND_TASK_SUCCESS)
ec2_params = activities.BuildAndPublishMacOS(
{'buildInput': {'debug': 'fake_ec2'}}
).ec2_params()
expected_prefix = (
'#!/bin/bash\n'
' ACTIVITY_ARN="arn:aws:states:us-west-2:223121549624:activity:'
'hhvm-build-and-publish-macos"\n'
f' SCRIPT_URL="https://raw.githubusercontent.com/{org}/packaging/'
f'{branch}/aws/hhvm1/worker/dummy-task.sh"\n'
' INIT_URL=""\n'
' AFTER_TASK_URL=""\n'
' \n'
' #!/bin/bash\n'
)
self.assertEqual(
ec2_params['UserData'][:len(expected_prefix)],
expected_prefix
)
def test_should_run(self):
past = (date.today() - timedelta(days=2)).strftime('%Y.%m.%d')
future = (date.today() + timedelta(days=2)).strftime('%Y.%m.%d')
self.assertEqual(
activities.MakeSourceTarball({'version': '4.20.12345'}).should_run(),
True
)
self.assertEqual(
activities.MakeSourceTarball({'version': past}).should_run(),
False
)
self.assertEqual(
activities.MakeSourceTarball({'version': future}).should_run(),
True
)
self.assertEqual(
activities.MakeBinaryPackage(
{'version': '4.27.0', 'platform': 'ubuntu-18.04-bionic'}
).should_run(),
False
)
self.assertEqual(
activities.MakeBinaryPackage(
{'version': future, 'platform': 'ubuntu-18.04-bionic'}
).should_run(),
True
)
self.assertEqual(
activities.PublishBinaryPackages({'version': '4.27.0'}).should_run(),
False
)
self.assertEqual(
activities.PublishSourceTarball({'version': '4.27.0'}).should_run(),
False
)
# we don't publish if nothing is "built_not_published"
with patch('common.build_statuses', return_value={
'ubuntu-18.04-bionic': 'not_built',
'source_gpg': 'not_built',
}):
self.assertEqual(
activities.PublishBinaryPackages({'version': '4.27.0'}).should_run(),
False
)
self.assertEqual(
activities.PublishSourceTarball({'version': '4.27.0'}).should_run(),
False
)
# we publish even if not everything is built
with patch('common.build_statuses', return_value={
'debian-8-jessie': 'not_built',
'ubuntu-18.04-bionic': 'built_not_published',
'source': 'not_built',
'source_gpg': 'built_not_published',
}):
self.assertEqual(
activities.PublishBinaryPackages({'version': '4.27.0'}).should_run(),
True
)
self.assertEqual(
activities.PublishSourceTarball({'version': '4.27.0'}).should_run(),
True
)
with patch('common.build_statuses', return_value={
'ubuntu-18.04-bionic': 'built_not_published',
'debian-42-zaphod': 'succeeded',
'source': 'succeeded',
'source_gpg': 'succeeded',
}):
self.assertEqual(
activities.PublishBinaryPackages({'version': '4.27.0'}).should_run(),
True
)
self.assertEqual(
activities.PublishSourceTarball({'version': '4.27.0'}).should_run(),
False
)
with patch('common.build_statuses', return_value={
'ubuntu-18.04-bionic': 'succeeded',
'source': 'built_not_published',
'debian-42-zaphod': 'succeeded',
'source_gpg': 'built_not_published',
}):
self.assertEqual(
activities.PublishBinaryPackages({'version': '4.27.0'}).should_run(),
False
)
self.assertEqual(
activities.PublishSourceTarball({'version': '4.27.0'}).should_run(),
True
)
# we shouldn't do a useless build_statuses() API call for nightlies
with patch('common.build_statuses') as mock_function:
self.assertEqual(
activities.PublishSourceTarball({'version': future}).should_run(),
False
)
self.assertEqual(mock_function.called, False)
self.assertEqual(
activities.PublishDockerImages({'version': '4.27.0'}).should_run(),
False
)
self.assertEqual(
activities.PublishDockerImages({'version': past}).should_run(),
False
)
self.assertEqual(
activities.PublishDockerImages({'version': future}).should_run(),
True
)
def test_prepare_activity(self):
self.assertEqual(
prepare_activity.lambda_handler({
'activity': 'MakeBinaryPackage',
'version': '4.26.12345',
'platform': 'ubuntu-18.04-bionic',
}),
{
'skip': False,
'taskInput': {
'name': 'MakeBinaryPackage-4.26.12345-ubuntu-18.04-bionic',
'env': (
'VERSION="4.26.12345"\n'
'DISTRO="ubuntu-18.04-bionic"\n'
'IS_NIGHTLY="false"\n'
'S3_BUCKET="hhvm-scratch"\n'
'S3_PATH="hhvm-4.26.12345.tar.gz"\n'
'S3_SOURCE="s3://hhvm-scratch/hhvm-4.26.12345.tar.gz"\n'
'PACKAGING_BRANCH="HHVM-4.26"'
),
'fail_args': '',
},
}
)
self.assertEqual(
prepare_activity.lambda_handler({
'buildInput': {'debug': 'test_build'},
'activity': 'MakeBinaryPackage',
'version': '4.26.12345',
'platform': 'ubuntu-18.04-bionic',
}),
{
'skip': False,
'taskInput': {
'name': 'MakeBinaryPackage-4.26.12345-ubuntu-18.04-bionic',
'env': (
'VERSION="4.26.12345"\n'
'DISTRO="ubuntu-18.04-bionic"\n'
'IS_NIGHTLY="false"\n'
'S3_BUCKET="hhvm-scratch"\n'
'S3_PATH="hhvm-4.26.12345.tar.gz"\n'
'S3_SOURCE="s3://hhvm-scratch/hhvm-4.26.12345.tar.gz"\n'
'PACKAGING_BRANCH="HHVM-4.26"\n'
'SKIP_PUBLISH="1"'
),
'fail_args': '--error TestBuildNoRetry',
},
}
)
future = (date.today() + timedelta(days=2)).strftime('%Y.%m.%d')
self.assertEqual(
prepare_activity.lambda_handler({
'buildInput': {'debug': 'skip_ec2'},
'activity': 'PublishDockerImages',
'version': future,
}),
{
# skip_ec2 causes this to be True, but the taskInput is still included
# since it's useful for debugging
'skip': True,
'taskInput': {
'name': f'PublishDockerImages-{future}',
'env': (
f'VERSION="{future}"\n'
'IS_NIGHTLY="true"\n'
'S3_BUCKET="hhvm-downloads"\n'
f'S3_PATH="source/nightlies/hhvm-nightly-{future}.tar.gz"\n'
'S3_SOURCE="s3://hhvm-downloads/source/nightlies/'
f'hhvm-nightly-{future}.tar.gz"\n'
'PACKAGING_BRANCH="master"\n'
'DOCKER_ONLY="1"'
),
'fail_args': '',
},
}
)
def get_check_if_repos_changed_event(self, successes, debug=''):
keys = ['success' if success else 'failure' for success in successes]
return {
'buildInput': {'debug': debug},
'results': {
'ForEachVersion': [
{
'version': '3.30.12',
'results': {
'MakeSourceTarball': {'success': {}},
'PublishBinaryPackages': {'failure': {}},
'PublishSourceTarballAndPublishDockerImages': [
{'results': {'PublishSourceTarball': {keys[0]: {}}}},
{'results': {'PublishDockerImages': {'success': {}}}},
],
},
},
{
'version': '4.42.0',
'results': {'PublishBinaryPackages': {keys[1]: {}}},
},
],
},
}
def test_check_if_repos_changed(self):
self.assertEqual(
check_if_repos_changed.lambda_handler(
self.get_check_if_repos_changed_event([False, False])
),
False
)
self.assertEqual(
check_if_repos_changed.lambda_handler(
self.get_check_if_repos_changed_event([False, True])
),
True
)
self.assertEqual(
check_if_repos_changed.lambda_handler(
self.get_check_if_repos_changed_event([True, False])
),
True
)
self.assertEqual(
check_if_repos_changed.lambda_handler(
self.get_check_if_repos_changed_event([True, True])
),
True
)
self.assertEqual(
check_if_repos_changed.lambda_handler(
self.get_check_if_repos_changed_event([False, False], 'skip_ec2')
),
False
)
self.assertEqual(
check_if_repos_changed.lambda_handler(
self.get_check_if_repos_changed_event([False, True], 'fake_ec2')
),
False
)
self.assertEqual(
check_if_repos_changed.lambda_handler(
self.get_check_if_repos_changed_event([True, True], 'skip_ec2')
),
False
)
self.assertEqual(
check_if_repos_changed.lambda_handler(
self.get_check_if_repos_changed_event([True, True], 'test_build')
),
False
)
# test nightly special case
self.assertEqual(
check_if_repos_changed.lambda_handler({
'results': {
'ForEachVersion': [
{
'version': '2019.11.01',
'results': {'MakeSourceTarball': {'success': {}}},
},
],
},
}),
True
)
def test_normalize_results_and_check_for_failures(self):
v1 = '3.30.12'
v1_before = {
'version': v1,
'results': {
'MakeSourceTarball': {'skip': True},
'ForEachPlatform': [
{
'platform': 'debian-8-jessie',
'results': {
'MakeBinaryPackage': {'success': {'ec2': 'i-faceb001'}},
},
},
{
'results': {
'MakeBinaryPackage': {'skip': True},
},
'platform': 'ubuntu-14.04-trusty',
},
],
'PublishSourceTarballAndPublishDockerImages': [
{
'results': {
'PublishSourceTarball': {
'skip': False,
'taskInput': {
'name': 'PublishSourceTarball-3.30.12',
'env': 'VERSION="3.30.12"\nIS_NIGHTLY="false"',
},
'success': {'ec2': 'i-faceb002'},
},
},
},
{
'results': {
'PublishDockerImages': {'success': {'ec2': 'i-faceb003'}},
},
},
],
},
}
v1_after = {
'MakeSourceTarball': {'skip': True},
'ForEachPlatform': {
'debian-8-jessie': {
'MakeBinaryPackage': {'success': {'ec2': 'i-faceb001'}},
},
'ubuntu-14.04-trusty': {
'MakeBinaryPackage': {'skip': True},
},
},
'PublishSourceTarball': {'success': {'ec2': 'i-faceb002'}},
'PublishDockerImages': {'success': {'ec2': 'i-faceb003'}},
}
v2 = '4.42.0'
v2_before = {
'version': v2,
'results': {'foo': {'skip': True}},
}
v2_after = {
'foo': {'skip': True},
}
parallel_steps_before = [
{
'results': {
'UpdateIndices': {'success': {'ec2': 'i-faceb004'}},
},
},
{
'results': {
'InvalidateCloudFront': {'success': {'ec2': 'i-faceb005'}},
},
},
]
everything_after = {
'ForEachVersion': {
v1: v1_after,
v2: v2_after,
},
'UpdateIndices': {'success': {'ec2': 'i-faceb004'}},
'InvalidateCloudFront': {'success': {'ec2': 'i-faceb005'}},
}
# normalization inside ForEachVersion
self.assertEqual(normalize_results.lambda_handler(v1_before), v1_after)
self.assertEqual(normalize_results.lambda_handler(v2_before), v2_after)
# final normalization after ForEachVersion
self.assertEqual(
check_for_failures.lambda_handler(normalize_results.lambda_handler({
'buildInput': {},
'results': {
'ForEachVersion': [
{
'version': v1,
'results': v1_after,
},
{
'version': v2,
'results': v2_after,
},
],
'UpdateIndicesAndInvalidateCloudFront': parallel_steps_before,
},
})),
everything_after
)
# normalization of everything at once (not used right now but was used in
# the past and we may need it again at some point)
self.assertEqual(
check_for_failures.lambda_handler(normalize_results.lambda_handler({
'buildInput': {},
'results': {
'ForEachVersion': [
v1_before,
v2_before,
],
'UpdateIndicesAndInvalidateCloudFront': parallel_steps_before,
},
})),
everything_after
)
with self.assertRaisesRegex(
Exception,
'^The following steps have failed:\nfoo bar$'
):
check_for_failures.lambda_handler(normalize_results.lambda_handler(
{'results': {'foo': {'failure': {'Cause': 'bar'}}}}
))
with self.assertRaisesRegex(
Exception,
'^The following steps have failed:\n'
'MakeSourceTarball 4.2.0 \n'
'PublishBinaryPackage 4.2.0 debian \n'
'MakeBinaryPackage 4.2.1 ubuntu \n'
'PublishBinaryPackage 4.2.1 ubuntu \n'
'PublishBinaryPackage 4.2.1 debian \n'
'bar $'
):
check_for_failures.lambda_handler(normalize_results.lambda_handler({
'results': {
'foo': {'success': {}},
'ForEachVersion': [
{
'version': '4.2.0',
'results': {
'MakeSourceTarball': {'failure': {}},
'ForEachPlatform': [
{
'platform': 'ubuntu',
'results': {'PublishBinaryPackage': {'success': {}}}
},
{
'platform': 'debian',
'results': {'PublishBinaryPackage': {'failure': {}}},
},
],
},
},
{
'version': '4.2.1',
'results': {
'MakeSourceTarball': {'success': {}},
'ForEachPlatform': [
{
'platform': 'ubuntu',
'results': {
'MakeBinaryPackage': {'failure': {}},
'PublishBinaryPackage': {'failure': {}},
}
},
{
'platform': 'debian',
'results': {
'MakeBinaryPackage': {'success': {}},
'PublishBinaryPackage': {'failure': {}},
},
},
],
},
},
],
'bar': {'failure': {}},
},
}))
def test_health_check(self):
execution_arn = (
'arn:aws:states:us-west-2:223121549624:execution:'
'one-state-machine-to-rule-them-all:'
'4962b666-0d65-debf-ad45-552d610877f6_24de7839-b273-a4e9-5057-2586b7033ab5'
)
self.assertEqual(
health_check.lambda_handler({
'execution': execution_arn,
'endState': 'CheckIfReposChanged',
}),
False
)
self.assertEqual(
health_check.lambda_handler({
'execution': execution_arn,
'endState': 'IDoNotExist',
}),
True
)
def test_get_pending_activities(self):
events = [
{
'type': 'ActivityScheduled',
'id': 29,
'activityScheduledEventDetails': {
'resource':
'arn:aws:states:us-west-2:223121549624:activity:'
'hhvm-make-source-tarball',
}
},
{
'type': 'ActivityScheduled',
'id': 31,
'activityScheduledEventDetails': {
'resource':
'arn:aws:states:us-west-2:223121549624:activity:'
'hhvm-make-binary-package',
}
},
]
self.assertEqual(
health_check.get_pending_activities(events),
[activities.MakeSourceTarball, activities.MakeBinaryPackage]
)
events += [{'type': 'ActivityStarted', 'previousEventId': 29}]
self.assertEqual(
health_check.get_pending_activities(events),
[activities.MakeBinaryPackage]
)
events += [{'type': 'ActivityStarted', 'previousEventId': 31}]
self.assertEqual(health_check.get_pending_activities(events), [])
def test_build_and_publish_macos(self):
future = (date.today() + timedelta(days=2)).strftime('%Y.%m.%d')
macos1 = list(Config.macos_versions.keys())[0]
activity = activities.BuildAndPublishMacOS(
{'version': future, 'buildInput': {'platforms': []}}
)
self.assertEqual(
activity.platforms_to_build(),
Config.macos_versions.keys()
)
self.assertEqual(activity.should_run(), True)
self.assertEqual(
activity.task_env(),
{'PLATFORM': Config.macos_versions[macos1]}
if len(Config.macos_versions) == 1
else {}
)
activity = activities.BuildAndPublishMacOS(
{'version': future, 'buildInput': {'platforms': [macos1, 'ubuntu']}}
)
self.assertEqual(activity.platforms_to_build(), {macos1})
self.assertEqual(activity.should_run(), True)
self.assertEqual(
activity.task_env(),
{'PLATFORM': Config.macos_versions[macos1]}
)
if len(Config.macos_versions) > 1:
macos2 = list(Config.macos_versions.keys())[1]
activity = activities.BuildAndPublishMacOS(
{'version': future, 'buildInput': {'platforms': [macos1, macos2]}}
)
self.assertEqual(activity.platforms_to_build(), {macos1, macos2})
self.assertEqual(activity.should_run(), True)
self.assertEqual(activity.task_env(), {})
activity = activities.BuildAndPublishMacOS(
{'version': future, 'buildInput': {'platforms': ['ubuntu']}}
)
self.assertEqual(activity.should_run(), False)
self.assertEqual(activity.platforms_to_build(), set())
activity = activities.BuildAndPublishMacOS(
{'version': '4.102.0', 'buildInput': {'platforms': []}}
)
self.assertEqual(activity.platforms_to_build(), set())
self.assertEqual(activity.should_run(), False)
activity = activities.BuildAndPublishMacOS(
{'version': '4.102.0', 'buildInput': {'platforms': [macos1]}}
)
self.assertEqual(activity.platforms_to_build(), set())
self.assertEqual(activity.should_run(), False)
# test build
activity = activities.BuildAndPublishMacOS({
'version': future,
'buildInput': {'debug': 'test_build', 'platforms': []}
})
self.assertEqual(
activity.platforms_to_build(),
Config.macos_versions.keys()
)
self.assertEqual(activity.should_run(), True)
self.assertEqual(
activity.task_env(),
{'PLATFORM': Config.macos_versions[macos1], 'SKIP_PUBLISH': '1'}
if len(Config.macos_versions) == 1
else {'SKIP_PUBLISH': '1'}
)
activity = activities.BuildAndPublishMacOS({
'version': future,
'buildInput': {'debug': 'test_build', 'platforms': [macos1]}
})
self.assertEqual(activity.platforms_to_build(), {macos1})
self.assertEqual(activity.should_run(), True)
self.assertEqual(
activity.task_env(),
{'SKIP_PUBLISH': '1', 'PLATFORM': Config.macos_versions[macos1]}
)
if __name__ == '__main__':
unittest.main()