--- # tasks file for qb/ruby/gem/release # NOTE We do this because the `release` Rake task `bundler/gem_tasks` # provides **will** fail if there are any uncommitted files... # which is annoying as all hell when the dirt is just a dev submod that # is not used in the release version, but there does not seem to be # any options to ignore files or paths: # # https://github.com/bundler/bundler/blob/c4fc79a2bfed38335a3371300bea49286a371d83/lib/bundler/gem_helper.rb#L151 # # So, we do the check first so we don't both with anything else if it's # going to fail (and it's the most common thing that gets in the way, # so it's nice to catch it early). # - name: >- Check that the git repo at {{ gem_root }} is clean. include_role: name: qb/git/check/clean vars: git_root: >- {{ gem_root }} - name: Ensure Bundler is available gem: name: bundler - name: >- Do a `bundle install`. bundler: state: present chdir: >- {{ gem_root }} - name: >- See if a pre-release script exists at `//dev/hooks/pre-release`. stat: path: >- {{ gem_root | path_join( 'dev', 'hooks', 'pre-release' ) }} register: gem_pre_release_script_stat # NOTE Contrary to how it might seems in the [docs][1], # the `stat` object seems to *only* have the `exists` property if the # path does not exist (set to `false`), necessitating we # # [1]: http://docs.ansible.com/ansible/latest/stat_module.html # - when: >- gem_pre_release_script_stat.stat.exists and gem_pre_release_script_stat.stat.executable name: >- Execute `//dev/hooks/pre-release` script. stream: cmd: ./dev/hooks/pre-release chdir: >- {{ gem_root }} - name: >- Get gem and version info vars.rb: namespace: gem bind: gem_root: "{{ gem_root }}" version_file: "{{ gem_version_file }}" cwd: "{{ qb_cwd }}" file: >- {{ role_path }}/scripts/gem_and_version_info.rb provides: gem_name: non_empty_str gem_current_version: non_empty_str gem_release_version: non_empty_str gem_next_version: non_empty_str gem_version_path: abs_path gem_spec_path: abs_path - debug: msg: - current: >- {{ gem_current_version }} - release: >- {{ gem_release_version }} - next: >- {{ gem_next_version }} - spec_path: >- {{ gem_spec_path }} - version_path: >- {{ gem_version_path }} - when: gem_current_version != gem_release_version name: >- Change version in `{{ gem_version_path }}` from current `{{ gem_current_version }}` to release `{{ gem_release_version }}`. include_tasks: >- {{ role_path }}/tasks/_set_version.yml vars: version: >- {{ gem_release_version }} commit_message: >- bump to v{{ gem_release_version }} - name: >- Do the actual release via Rake and Bundler's gem helper tasks include_tasks: >- {{ role_path }}/tasks/release.yml - name: >- Change version to next version `{{ gem_next_version }}`. include_tasks: >- {{ role_path }}/tasks/_set_version.yml vars: version: >- {{ gem_next_version }} commit_message: >- start {{ gem_next_version }} - name: >- Push next dev version. command: git push args: chdir: >- {{ gem_root }} - debug: msg: > v{{ gem_release_version }} released. - name: >- See if a post-release script exists at `//dev/hooks/post-release`. stat: path: >- {{ gem_root | path_join( 'dev', 'hooks', 'post-release' ) }} register: gem_post_release_script_stat - when: >- gem_post_release_script_stat.stat.exists and gem_post_release_script_stat.stat.executable name: >- Execute `//dev/hooks/post-release` script. stream: cmd: ./dev/hooks/post-release chdir: >- {{ gem_root }}