def create_tasks_from_issues(issues, repo_name, mentors): head_description = """Your task is to solve an open bug or missing feature in the {} repository. Here is the issue: """.format(repo_name) tail_description = """ Instructions for all issue tasks are at https://github.com/zulip/zulip-gci/blob/master/tasks/2017/issues.md """ # Task Type A for (issue, tags) in issues: issue_url = "https://api.github.com/repos/zulip/{}/issues/{}".format( repo_name, str(issue)) issue_data = json.loads( requests.get(issue_url).content.decode('utf-8')) title = issue_data['title'] url = issue_data['html_url'] description = 'Issue [#{0}]({1}) {2}'.format(issue, url, title) print(head_description + description + tail_description) print("") upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Issue #{0} {1}'.format(issue, title), description=head_description + description + tail_description, status=2, # 1: draft, 2: published max_instances=1, mentors=mentors, tags=['issues'] + tags, # free text, maximum 5 tags is_beginner=False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[1], time_to_complete_in_days=5, # must be between 3 and 7 # external_url=url, private_metadata="issues", do_upload=args.force)
parser.add_argument('-f', '--force', dest='force', action="store_true", default=False) args = parser.parse_args() upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Write documentation for the Chat Box', description = """Write a detailed description about the chatBox (functioning and what each button does) with screenshots. Checklist: Include text about the behavior details about swipe to remove and it automatically goes away when the main recyclerView is scrolled. Switching between private and stream mode.""", status = 1, # 1: draft, 2: published max_instances = 1, mentors = ['*****@*****.**', '*****@*****.**', '*****@*****.**' , '*****@*****.**'], tags = ['documentation', 'user guides', 'android'], # free text is_beginner = True, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [3, 5], time_to_complete_in_days = 3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/android.md", private_metadata = "android-A", do_upload = args.force) upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Write documentation for the Streams Drawer',
"Slack's guide for this feature is at %s." description_C = description + "For this task, do **Part 3** for any three features." for feature, slack_link in features: # Part 1 upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Write a rough user guide for a feature.', description=description_A_and_B % (1, feature, slack_link), status=1, # 1: draft, 2: published max_instances=1, mentors=[ '*****@*****.**', '*****@*****.**', '*****@*****.**' ], tags=['documentation', 'user guides'], # free text is_beginner=True, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[3, 5], time_to_complete_in_days=3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. external_url= "https://github.com/zulip/zulip-gci/blob/master/tasks/user-guides.md", private_metadata="user-guides-A", do_upload=args.force) # Part 2 upload_task( name='Polish an existing user guide for a feature.', description=description_A_and_B % (2, feature, slack_link),
description = """This task will teach you how to create a pull request, which is an important skill to learn for contributing to an open source project on GitHub. Follow the tutorial at https://github.com/zulip/zulip-gci/blob/master/tasks/2017/submit-a-pull-request.md """ upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Learn how to create a GitHub Pull Request', description=description, status=2, # 1: draft, 2: published max_instances=100, mentors=[ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**' ], tags=['pull request', 'git', 'github'], # free text is_beginner=True, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[3], time_to_complete_in_days=5, # must be between 3 and 7 external_url= "https://github.com/zulip/zulip-gci/blob/master/tasks/2017/submit-a-pull-request.md", private_metadata="submit-a-pull-request", do_upload=args.force) if not args.force: print print( "No tasks uploaded. Add a -f argument to upload tasks to the GCI website." )
# Task Type A for (issue, tags) in issues: issue_data = json.loads(requests.get("https://api.github.com/repos/zulip/zulip/issues/" + str(issue)).content) title = issue_data['title'] url = issue_data['html_url'] description = 'Issue [#{0}]({1}) {2}'.format(issue, url, title) upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Issue #{0} {1}'.format(issue, title), description = description + tail_description, status = 2, # 1: draft, 2: published max_instances = 1, mentors = ['*****@*****.**', '*****@*****.**'], tags = ['issues'] + tags, # free text is_beginner = False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [1], time_to_complete_in_days = 5, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. external_url = url, private_metadata = "issues", do_upload = args.force) if not args.force: print print("No tasks uploaded. Add a -f argument to upload tasks to the GCI website.") print("This is not idempotent. Running this twice with -f will create two sets of tasks.")
""" description_A = description + "For this task, do **Task Type A** for the following set of directories: **%s**." description_B = description + "For this task, do **Task Type B** for the following file: **%s**." for directory_set in A_tasks: upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Update text_type->Text in mypy annotations', description = description_A % directory_set, status = 2, # 1: draft, 2: published max_instances = 1, mentors = ['*****@*****.**', '*****@*****.**'], tags = ['python', 'mypy'], # free text is_beginner = True, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [1], time_to_complete_in_days = 3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/mypy-annotations.md", private_metadata = "mypy-annotations-A", do_upload = args.force) for filename in B_tasks: upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Add mypy annotations to %s' % (filename,), description = description_B % filename, status = 2, # 1: draft, 2: published
description = """This task will introduce you to git version control system. Instructions for this task are at https://github.com/zulip/zulip-gci/blob/master/tasks/2017/git-comfortable.md """ upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name= 'Get comfortable with git, branches, and more with some great tutorials!', description=description, status=2, # 1: draft, 2: published max_instances=100, mentors=['*****@*****.**', '*****@*****.**'], tags=['intro', 'git'], # free text is_beginner=True, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[1, 3], time_to_complete_in_days=5, # must be between 3 and 7 external_url= "https://github.com/zulip/zulip-gci/blob/master/tasks/2017/git-comfortable.md", private_metadata="git-comfortable", do_upload=args.force) if not args.force: print print( "No tasks uploaded. Add a -f argument to upload tasks to the GCI website." ) print(
""" description_A = description + "For this task, do Task Type A for the **%s** feature." description_B = description + "For this task, do Task Type B for the following features:\n" # Task Type A for feature in features: upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Write a user guide for the * %s * feature.' % (feature, ), description=description_A % (feature, ), status=2, # 1: draft, 2: published max_instances=1, mentors=['*****@*****.**'], tags=['documentation', 'user guides'], # free text is_beginner=False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[3, 5], time_to_complete_in_days=3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. private_metadata="user-guides-A", do_upload=args.force) # Task Type B for name, features in features_review: upload_task( name='Review user guides: %s.' % name, description=description_B + create_list(features), status=2, # 1: draft, 2: published max_instances=1,
""" description_A = description + "For this task, do **Task Type A**." description_BCD = description + "For this task, do **Task Type %(type)s** for " + \ "the **%(integration)s** integration (%(desc)s)." # Task Type A upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Learn how Zulip integrations work.', description = description_A, status = 2, # 1: draft, 2: published max_instances = 20, mentors = ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'], tags = ['python', 'integrations'], # free text is_beginner = False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [1], time_to_complete_in_days = 5, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/webhook-integrations.md", private_metadata = "webhook-integrations-A", do_upload = args.force) for integration, desc in integrations: # Task Type B upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Investigate how the %s integration should work.' % (integration,), description = description_BCD % {'type': 'B', 'integration': integration, 'desc': desc},
issues = [] description = """This task is for posting or resolving the Github issue or pull request referenced in the title. """ # Task Type A for issue in issues: upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Special task for #%s' % (issue, ), description=description, status=2, # 1: draft, 2: published max_instances=1, mentors=['*****@*****.**', '*****@*****.**'], tags=['issues'], # free text is_beginner=False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[1, 4], time_to_complete_in_days=3, # must be between 3 and 7 private_metadata="issues", do_upload=args.force) if not args.force: print print( "No tasks uploaded. Add a -f argument to upload tasks to the GCI website." ) print( "This is not idempotent. Running this twice with -f will create two sets of tasks."
task_description = """"Help us prepare the comparison page between Zulip and other chat tools, with a matrix of which features each product has or doesn't have. Your task is to test **%s** and figure out which all features are present in it. See %s to see the features you have to test and the output format.""" for chat_application_name in chat_applications_names: for set in task_sets: url = "https://github.com/hackerkid/zulip-gci/blob/master/tasks/chat-application-comparison.md#set-%s" % set upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = task_name % (chat_application_name, set.upper()), description = task_description % (chat_application_name, url), status = 1, # 1: draft, 2: published max_instances = 1, mentors = ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'], tags = ['user research'], # free text is_beginner = False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [2, 5], time_to_complete_in_days = 3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "TODO", private_metadata = "chat-application-comparison", do_upload = args.force) if not args.force: print print("No tasks uploaded. Add a -f argument to upload tasks to the GCI website.") print("This is not idempotent. Running this twice with -f will create two sets of tasks.")
description = """This task will introduce you to the process of making and testing changes to Zulip. Instructions for this task are at https://github.com/zulip/zulip-gci/blob/master/tasks/intro-to-zulip-server.md. """ upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Intro to Zulip server development', description = description, status = 2, # 1: draft, 2: published max_instances = 30, mentors = ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'], tags = ['intro'], # free text is_beginner = True, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [1], time_to_complete_in_days = 5, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/intro-to-zulip-server.md", private_metadata = "intro-to-zulip-server", do_upload = args.force) if not args.force: print print("No tasks uploaded. Add a -f argument to upload tasks to the GCI website.") print("This is not idempotent. Running this twice with -f will create two sets of tasks.")
""" description_A = description + "For this task, do **Task Type A** for the following set of directories: **%s**." description_B = description + "For this task, do **Task Type B** for the following file: **%s**." for directory_set in A_tasks: upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Update text_type->Text in mypy annotations', description = description_A % directory_set, status = 2, # 1: draft, 2: published max_instances = 1, mentors = ['*****@*****.**', '*****@*****.**'], tags = ['python', 'mypy'], # free text is_beginner = True, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [1], time_to_complete_in_days = 3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/mypy-annotations.md", private_metadata = "mypy-annotations-A", do_upload = args.force) for filename in B_tasks: upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Add mypy annotations to %s' % (filename,), description = description_B % filename, status = 2, # 1: draft, 2: published
https://github.com/zulip/zulip-gci/blob/master/tasks/review-slack-integrations.md For this task, review rows **%s** through **%s** in the spreadsheet. """ for n in range(5, 806, 30): low = n high = max(n + 29, 806) upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Analyze Slack integrations: rows {} to {}'.format(low, high), description = description % (low, high), status = 2, # 1: draft, 2: published max_instances = 1, mentors = ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'], tags = ['integrations', 'research'], # free text is_beginner = False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [5], time_to_complete_in_days = 5, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/eslint.md", private_metadata = "slack", do_upload = args.force) if not args.force: print print("No tasks uploaded. Add a -f argument to upload tasks to the GCI website.") print("This is not idempotent. Running this twice with -f will create two sets of tasks.")
For this task, do **Task Type B** for the following set of files: %s """ for files in tasks_A: file_list = "\n".join([("* " + file_name) for file_name in files]), upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Update mypy annotations to Python 3 syntax', description=description_A % file_list, status=2, # 1: draft, 2: published max_instances=1, mentors=['*****@*****.**', '*****@*****.**'], tags=['python', 'mypy'], # free text is_beginner=False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[1], time_to_complete_in_days=4, # must be between 3 and 7 # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/mypy-annotations.md", private_metadata="mypy-annotations-A", do_upload=args.force) for files in tasks_B: file_list = "\n".join([("* " + file_name) for file_name in files]), upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name="Add mypy annotations to Zulip's interactive bots", description=description_B % file_list, status=2, # 1: draft, 2: published
("group python_rules", ['python']), ("groups bash_rules, handlebars_rules and jinja2_rules", []), ("groups css_rules and html_rules", ['html', 'css']), ] linter_rules = [] for task, tags in linter_rules: upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name="Write tests for Zulip's code linter", description=description.format(task), status=2, # 1: draft, 2: published max_instances=1, mentors=['*****@*****.**'], tags=['linting', 'testing'] + tags, # free text is_beginner=True, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[1, 4], time_to_complete_in_days=3, # must be between 3 and 7 # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/2017/linter-rules.md", private_metadata="linter-rules", do_upload=args.force) if not args.force: print( "No tasks uploaded. Add a -f argument to upload tasks to the GCI website." ) print( "This is not idempotent. Running this twice with -f will create two sets of tasks." )
description_A = description + "For this task, do **Task Type A**." description_BCD = description + "For this task, do **Task Type %(type)s** for " + \ "the **%(integration)s** integration (%(desc)s)." # Task Type A upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Learn how Zulip integrations work.', description=description_A, status=2, # 1: draft, 2: published max_instances=20, mentors=[ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**' ], tags=['python', 'integrations'], # free text is_beginner=False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[1], time_to_complete_in_days=5, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. external_url= "https://github.com/zulip/zulip-gci/blob/master/tasks/webhook-integrations.md", private_metadata="webhook-integrations-A", do_upload=args.force) for integration, desc in integrations: # Task Type B upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf
testing changes to Zulip. Instructions for this task are at https://github.com/zulip/zulip-gci/blob/master/tasks/2017/intro-to-zulip-server.md """ upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Intro to Zulip server development', description=description, status=2, # 1: draft, 2: published max_instances=100, mentors=[ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**' ], tags=['intro', 'dev environment', 'vagrant'], # free text is_beginner=True, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[1, 3], time_to_complete_in_days=5, # must be between 3 and 7 external_url= "https://github.com/zulip/zulip-gci/blob/master/tasks/2017/intro-to-zulip-server.md", private_metadata="intro-to-zulip-server", do_upload=args.force) if not args.force: print print( "No tasks uploaded. Add a -f argument to upload tasks to the GCI website." )
args = parser.parse_args() description = """This task will teach you how to create a pull request, which is an important skill to learn for contributing to an open source project on GitHub. Follow the tutorial at https://github.com/zulip/zulip-gci/blob/master/tasks/submit-a-pull-request.md. """ upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Learn how to create a GitHub Pull Request', description = description, status = 1, # 1: draft, 2: published max_instances = 40, mentors = ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'], tags = [], # free text is_beginner = True, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [3], time_to_complete_in_days = 5, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/submit-a-pull-request.md", private_metadata = "submit-a-pull-request", do_upload = args.force) if not args.force: print print("No tasks uploaded. Add a -f argument to upload tasks to the GCI website.") print("This is not idempotent. Running this twice with -f will create two sets of tasks.")
great way to learn the basics of refactoring, git workflow, and good style. Instructions for PEP-8 tasks are at https://github.com/zulip/zulip-gci/blob/master/tasks/pep8.md. For this task, fix the errors for the following rule(s): **%s**. """ for rules, is_beginner in pep8_rules: upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Cleanup Zulip code to follow PEP-8 style standards', description = description % ', '.join(rules), status = 2, # 1: draft, 2: published max_instances = 1, mentors = ['*****@*****.**', '*****@*****.**', '*****@*****.**'], tags = ['python', 'pep8'], # free text is_beginner = is_beginner, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [1], time_to_complete_in_days = 3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/pep8.md", private_metadata = "pep8", do_upload = args.force) if not args.force: print print("No tasks uploaded. Add a -f argument to upload tasks to the GCI website.") print("This is not idempotent. Running this twice with -f will create two sets of tasks.")
testing changes to Zulip. Instructions for this task are at https://github.com/zulip/zulip-gci/blob/master/tasks/intro-to-zulip-server.md. """ upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Intro to Zulip server development', description=description, status=2, # 1: draft, 2: published max_instances=30, mentors=[ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**' ], tags=['intro'], # free text is_beginner=True, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[1], time_to_complete_in_days=5, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/intro-to-zulip-server.md", private_metadata="intro-to-zulip-server", do_upload=args.force) if not args.force: print print( "No tasks uploaded. Add a -f argument to upload tasks to the GCI website." )
Choose a tool that works best for you! For this task, do **Task Type %(type)s**. """ # Task Type A upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Draw user avatars.', description=description % {'type': 'A'}, status=2, # 1: draft, 2: published max_instances=20, mentors=['*****@*****.**', '*****@*****.**'], tags=['art', 'avatars'], # free text is_beginner=True, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[2], time_to_complete_in_days=3, # must be between 3 and 7 external_url= "https://github.com/zulip/zulip-gci/blob/master/tasks/2017/visual-art.md", private_metadata="visual-art-A", do_upload=args.force) # Task Type B upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Generate identicons for user avatars.', description=description % {'type': 'B'}, status=2, # 1: draft, 2: published
Instructions for quality assurance tasks are at https://github.com/zulip/zulip-gci/blob/master/tasks/quality-assurance.md. For this task, do any one of the listed Task Types. """ upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Find bugs in Zulip', description=description, status=2, # 1: draft, 2: published max_instances=20, mentors=['*****@*****.**', '*****@*****.**'], tags=['bug squashing', 'internationalization', 'android', 'frontend'], # free text is_beginner=False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[2, 4], time_to_complete_in_days=3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. external_url= "https://github.com/zulip/zulip-gci/blob/master/tasks/quality-assurance.md", private_metadata="quality-assurance", do_upload=args.force) if not args.force: print print( "No tasks uploaded. Add a -f argument to upload tasks to the GCI website." )
**%s** and figure out which all features are present in it. See %s to see the features you have to test and the output format.""" for chat_application_name in chat_applications_names: for set in task_sets: url = "https://github.com/hackerkid/zulip-gci/blob/master/tasks/chat-application-comparison.md#set-%s" % set upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name=task_name % (chat_application_name, set.upper()), description=task_description % (chat_application_name, url), status=2, # 1: draft, 2: published max_instances=1, mentors=[ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**' ], tags=['user research'], # free text is_beginner=False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[2, 5], time_to_complete_in_days=3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "TODO", private_metadata="chat-application-comparison", do_upload=args.force) if not args.force: print print( "No tasks uploaded. Add a -f argument to upload tasks to the GCI website." )
Instructions for this task are at https://github.com/zulip/zulip-gci/blob/master/tasks/quality-assurance.md. """ upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name= 'Find and report bugs in Zulip (backend, web, desktop, mobile, bots, or anywhere else!)', description=description, status=2, # 1: draft, 2: published max_instances=40, mentors=['*****@*****.**'], tags=[ 'bug squashing', 'internationalization', 'mobile', 'frontend', 'real-time sync' ], # free text is_beginner=False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[2, 4], time_to_complete_in_days=3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/2017/quality-assurance.md", private_metadata="quality-assurance", do_upload=args.force) if not args.force: print print( "No tasks uploaded. Add a -f argument to upload tasks to the GCI website."
description_AB = description + "For this task, do **Task Type %(type)s**." description_C = description + "For this task, do **Task Type C** for creating a " + \ "**%(bot)s** bot (%(desc)s)." description_D = description + "For this task, do **Task Type D** for improving " + \ "the **%(bot)s** bot (%(desc)s)." # Task Type A upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Learn about interactive bots, pt 1: running the helloworld bot.', description=description_AB % {'type': 'A'}, status=2, # 1: draft, 2: published max_instances=100, mentors=['*****@*****.**'], tags=['python', 'bots'], # free text is_beginner=False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[1], time_to_complete_in_days=3, # must be between 3 and 7 external_url= "https://github.com/zulip/zulip-gci/blob/master/tasks/2017/interactive-bots.md", private_metadata="interactive-bots-A", do_upload=args.force) # Task Type B upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Learn about interactive bots, pt 2: creating a message info bot.', description=description_AB % {'type': 'B'}, status=2, # 1: draft, 2: published
of the different types of integrations and the enormous range of them. Instructions for these tasks are at https://github.com/zulip/zulip-gci/blob/master/tasks/review-slack-integrations.md For this task, review rows **%s** through **%s** in the spreadsheet. """ for n in range(5, 806, 30): low = n high = max(n + 29, 806) upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Analyze Slack integrations: rows {} to {}'.format(low, high), description = description % (low, high), status = 2, # 1: draft, 2: published max_instances = 1, mentors = ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'], tags = ['integrations', 'research'], # free text is_beginner = True # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [5], time_to_complete_in_days = 3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/eslint.md", private_metadata = "slack", do_upload = args.force) if not args.force: print
"the **%(integration)s** integration (%(desc)s)." description_E = description + "For this task, do **Task Type E** for " + \ "the webhook integrations {webhooks[0]}, {webhooks[1]} and {webhooks[2]}." # This task has already been uploaded for 2017 if False: # Task Type A upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Learn how Zulip integrations work.', description=description_A, status=2, # 1: draft, 2: published max_instances=100, mentors=['*****@*****.**', '*****@*****.**'], tags=['python', 'integrations'], # free text is_beginner=False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[1], time_to_complete_in_days=3, # must be between 3 and 7 external_url= "https://github.com/zulip/zulip-gci/blob/master/tasks/2017/webhook-integrations.md", private_metadata="webhook-integrations-A", do_upload=args.force) for integration, desc in integrations: # Task Type B upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Investigate how the %s integration should work.' % (integration, ),
them in the following fashion: %s. """ # Task Type A for (url, solution) in urls: upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Eliminate legacy %s URL.' % (url, ), description=description % (url, solution), status=2, # 1: draft, 2: published max_instances=1, mentors=['*****@*****.**', '*****@*****.**'], tags=['refactoring', "python"], # free text is_beginner=False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[1], time_to_complete_in_days=5, # must be between 3 and 7 private_metadata="issues", do_upload=args.force) if not args.force: print print( "No tasks uploaded. Add a -f argument to upload tasks to the GCI website." ) print( "This is not idempotent. Running this twice with -f will create two sets of tasks."
Instructions for eslint tasks are at https://github.com/zulip/zulip-gci/blob/master/tasks/eslint.md For this task, fix the errors for rule **%s**. """ for rules in eslint_rules: upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Cleanup Zulip JavaScript code: eslint %s' % (rules,), description = description % ', '.join(rules), status = 2, # 1: draft, 2: published max_instances = 1, mentors = ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'], tags = ['javascript', 'eslint'], # free text is_beginner = rules in ['new-cap', 'no-empty', 'space-before-blocks', 'yoda'], # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [1], time_to_complete_in_days = 3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/eslint.md", private_metadata = "eslint", do_upload = args.force) if not args.force: print print("No tasks uploaded. Add a -f argument to upload tasks to the GCI website.") print("This is not idempotent. Running this twice with -f will create two sets of tasks.")
For this task, fix the errors for rule **%s**. """ for rule in eslint_rules: upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Cleanup Zulip JavaScript code: eslint %s' % (rule, ), description=description % (rule, ), status=2, # 1: draft, 2: published max_instances=1, mentors=[ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**' ], tags=['javascript', 'eslint'], # free text is_beginner=rule in ['new-cap', 'no-empty', 'space-before-blocks', 'yoda'], # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[1], time_to_complete_in_days=3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/eslint.md", private_metadata="eslint", do_upload=args.force) if not args.force: print print( "No tasks uploaded. Add a -f argument to upload tasks to the GCI website."
description = """Find new bugs in Zulip! Instructions for quality assurance tasks are at https://github.com/zulip/zulip-gci/blob/master/tasks/quality-assurance.md. For this task, do any one of the listed Task Types. """ upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Find bugs in Zulip', description = description, status = 2, # 1: draft, 2: published max_instances = 20, mentors = ['*****@*****.**', '*****@*****.**'], tags = ['bug squashing', 'internationalization', 'android', 'frontend'], # free text is_beginner = False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [2, 4], time_to_complete_in_days = 3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/quality-assurance.md", private_metadata = "quality-assurance", do_upload = args.force) if not args.force: print print("No tasks uploaded. Add a -f argument to upload tasks to the GCI website.") print("This is not idempotent. Running this twice with -f will create two sets of tasks.")
https://github.com/zulip/zulip-gci/blob/master/tasks/bot-avatars.md For this task, do any one of the listed Task Types. """ upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Design or find avatars for Zulip bots', description=description, status=1, # 1: draft, 2: published max_instances=30, mentors=[ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**' ], tags=['design', 'bots', 'avatars'], # free text is_beginner=True, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[2, 5], time_to_complete_in_days=7, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. external_url= "https://github.com/zulip/zulip-gci/blob/master/tasks/bot-avatars.md", private_metadata="bot-avatars", do_upload=args.force) if not args.force: print print( "No tasks uploaded. Add a -f argument to upload tasks to the GCI website."
args = parser.parse_args() description = """\ This task teaches two skills important in developing almost any product: user research, and sales. The task description is available here: https://github.com/zulip/zulip-gci/blob/master/tasks/2017/user-research.md """ upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Learn about sales by doing user interviews', description = description, status = 2, # 1: draft, 2: published max_instances = 30, mentors = ['*****@*****.**', '*****@*****.**'], tags = ['outreach'], # free text is_beginner = False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [5], time_to_complete_in_days = 7, # must be between 3 and 7 # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/2017/user-research.md", private_metadata = "user-research", do_upload = args.force) if not args.force: print print("No tasks uploaded. Add a -f argument to upload tasks to the GCI website.") print("This is not idempotent. Running this twice with -f will create two sets of tasks.")
""" for language_tasks in languages_tasks: language = language_tasks[0] tasks = language_tasks[1] if 'A' in tasks: upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='%s: Research web application translations' % (language), description=description_ABCD % { 'type': 'A', 'language': language }, status=2, # 1: draft, 2: published max_instances=1, mentors=['*****@*****.**'], tags=['translation'], # free text is_beginner=False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[3, 5], time_to_complete_in_days=5, # must be between 3 and 7 external_url= "https://github.com/zulip/zulip-gci/blob/master/tasks/2017/translations.md", private_metadata="translations-A", do_upload=args.force) if 'B' in tasks: upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='%s: Write general translation rules' % (language), description=description_ABCD % {
""" description_ABD = description + "For this task, do **Task Type %(type)s**." description_C = description + "For this task, do **Task Type C** for " + \ "the **%(bot)s** bot (%(desc)s)." # Task Type A upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Learn about interactive bots, pt 1: running the followup bot.', description=description_ABD % {'type': 'A'}, status=2, # 1: draft, 2: published max_instances=30, mentors=['*****@*****.**'], tags=['python', 'bots'], # free text is_beginner=False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories=[1], time_to_complete_in_days=3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/webhook-integrations.md", private_metadata="interactive-bots-A", do_upload=args.force) # Task Type B upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name='Learn about interactive bots, pt 2: creating a links bot.', description=description_ABD % {'type': 'B'}, status=2, # 1: draft, 2: published
description_A_and_B = description + "For this task, do Task Type A for the **%s** feature.\n" + \ "Slack's guide for this feature is at %s." description_C = description + "For this task, do **Part 3** for any three features." for feature, slack_link in features: # Part 1 upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = 'Write a user guide for the %s feature.' % (feature,), description = description_A_and_B % (feature, slack_link), status = 2, # 1: draft, 2: published max_instances = 1, mentors = ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'], tags = ['documentation', 'user guides'], # free text is_beginner = False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [3, 5], time_to_complete_in_days = 3, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/user-guides.md", private_metadata = "user-guides-A", do_upload = args.force) # # Part 2 # upload_task( # name = 'Polish an existing user guide for a feature.', # description = description_A_and_B % (2, feature, slack_link), # # Note: this should be released as a draft, and published only after Part 1 is done # status = 1, # 1: draft, 2: published
titles = { "A": "Find a collection of avatars for Zulip bots", "B": "Design a collection of avatars for Zulip bots", "C": "Refine a collection of avatars for Zulip bots", } for task_type in titles.keys(): upload_task( # https://developers.google.com/open-source/gci/resources/downloads/TaskAPISpec.pdf name = titles[task_type], description = description % (task_type,), status = 2 if task_type != 'C' else 1, # 1: draft, 2: published max_instances = 10, mentors = ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'], tags = ['design', 'bots', 'avatars'], # free text is_beginner = False, # 1: Coding, 2: User Interface, 3: Documentation & Training, # 4: Quality Assurance, 5: Outreach & Research categories = [2, 5], time_to_complete_in_days = 7, # must be between 3 and 7 # Field currently not accessible via API. gci-support says it is coming soon. # external_url = "https://github.com/zulip/zulip-gci/blob/master/tasks/bot-avatars.md", private_metadata = "bot-avatars", do_upload = args.force) if not args.force: print print("No tasks uploaded. Add a -f argument to upload tasks to the GCI website.") print("This is not idempotent. Running this twice with -f will create two sets of tasks.")