- hosts: localhost gather_facts: no vars_files: - vars/versions.yml vars: release_dir: "./ansible_release" release_date: "{{lookup('pipe', 'date +\"%m-%d-%Y\"')}}" rpm_spec_line: | * {{lookup('pipe', 'date +"%a %b %d %Y"')}} Ansible, Inc. - {{ansible_release_version}}-{{ansible_release_string}} - Release {{ansible_release_version}}-{{ansible_release_string}} deb_changelog_line: | ansible ({{ansible_release_version}}) unstable; urgency=low * {{ansible_release_version}} -- Ansible, Inc. {{lookup('pipe', 'date -R')}} vars_prompt: - name: ansible_release_branch prompt: "Enter the release branch" private: no - name: ansible_release_version prompt: "Enter the release version" private: no - name: ansible_release_string prompt: "Enter the release string (ie. 0.1.beta1, or just 1 for final releases)" private: no #- name: ansible_release_codename # prompt: "Enter the release code name (only used if doing a final release)" # default: "" # private: no - name: is_final prompt: "Is this a final release (not a beta/rc)?" default: "no" private: no - name: do_push prompt: "Push repositories upstream when done?" default: "no" private: no tasks: - name: create a combined version string from the specified values set_fact: new_version: "v{{ansible_release_version}}-{{ansible_release_string}}" - name: assert certain variables are defined assert: that: - ansible_release_branch is defined - ansible_release_version is defined - ansible_release_string is defined - name: Remove ansible_release (if it exists) file: path: "{{release_dir}}/" state: absent - name: Clone the official repo git: #repo: "git@github.com:ansible/ansible.git" repo: "https://github.com/ansible/ansible.git" dest: "{{release_dir}}" version: "{{ansible_release_branch}}" recursive: yes - name: get the latest version shell: _raw_params: git tag | tail -1 chdir: "{{release_dir}}" register: latest_version - name: "assert the specified version ({{new_version}}) is greater than the latest version ({{latest_version.stdout}})" assert: that: - new_version|version_compare(latest_version.stdout, "gt") ignore_errors: yes - name: Update the VERSION file for the main repo copy: dest: "{{release_dir}}/VERSION" content: "{{ansible_release_version}} {{ansible_release_string}}\n" - name: Update the library version lineinfile: dest: "{{release_dir}}/lib/ansible/release.py" regexp: "^__version__ =" line: "__version__ = '{{ansible_release_version}}'" - block: - name: Update the spec file release list lineinfile: dest: "{{release_dir}}/packaging/rpm/ansible.spec" regexp: "^- Release {{ansible_release_version}}-{{ansible_release_string}}" line: "{{rpm_spec_line.rstrip()}}" insertafter: "^%changelog" - name: Update the deb changelog file lineinfile: dest: "{{release_dir}}/packaging/debian/changelog" regexp: "^ansible ({{ansible_release_version}})" line: "{{deb_changelog_line}}" insertafter: "-- Ansible, Inc. %DATE%" - name: Update RELEASES.txt template: dest: "{{release_dir}}/RELEASES.txt" src: "templates/RELEASES.tmpl" when: is_final|bool - name: "Make sure modules are checked out to {{ansible_release_branch}}" shell: _raw_params: "git checkout {{ansible_release_branch}}" chdir: "{{release_dir}}/lib/ansible/modules/{{item}}/" with_items: - core - extras - name: Update the VERSION file for the modules copy: dest: "{{release_dir}}/lib/ansible/modules/{{item}}/VERSION" content: "{{ansible_release_version}} {{ansible_release_string}}\n" with_items: - core - extras - name: Add and commit the updated files for the core modules shell: _raw_params: "git add ./ && git commit -m 'New release {{new_version}}'" chdir: "{{release_dir}}/lib/ansible/modules/{{item}}/" with_items: - core - extras - name: Add and commit the updated files for the main repo shell: _raw_params: "git add ./ && git commit -m 'New release {{new_version}}'" chdir: "{{release_dir}}/" - name: Tag the release shell: _raw_params: "git tag -fa {{new_version}} -m 'New release {{new_version}}'" chdir: "{{release_dir}}/" - name: update git config for the main repo lineinfile: dest: "{{release_dir}}/.git/config" regexp: "upstream" line: | [remote "upstream"] url = git@github.com:ansible/ansible.git fetch = +refs/heads/*:refs/remotes/origin/* - name: update git config for submodules lineinfile: dest: "{{release_dir}}/.git/modules/lib/ansible/modules/{{item}}/config" regexp: "submodule_upstream" line: | [remote "submodule_upstream"] url = git@github.com:ansible/ansible-modules-{{item}}.git fetch = +refs/heads/*:refs/remotes/origin/* with_items: - core - extras - name: create the dist tar.gz command: _raw_params: make sdist chdir: "{{release_dir}}/" environment: OFFICIAL: yes - name: rename the dist tar.gz to include the full release command: _raw_params: "mv dist/ansible-{{ansible_release_version}}.tar.gz dist/ansible-{{ansible_release_version}}-{{ansible_release_string}}.tar.gz" chdir: "{{release_dir}}/" - name: generate the SHA file for the tar.gz shell: _raw_params: "sha256sum dist/ansible-{{ansible_release_version}}-{{ansible_release_string}}.tar.gz > dist/ansible-{{ansible_release_version}}-{{ansible_release_string}}.tar.gz.sha" chdir: "{{release_dir}}/" - block: - pause: prompt: "Ready to push, this is the last chance to abort..." - name: Push the submodule repos shell: _raw_params: "git push submodule_upstream {{ansible_release_branch}}" chdir: "{{release_dir}}/lib/ansible/modules/{{item}}/" with_items: - core - extras - name: Push the updates and/or tag shell: _raw_params: "git push --tags upstream {{ansible_release_branch}}" chdir: "{{release_dir}}/lib/ansible/modules/{{item}}/" when: do_push|bool