1
0
forked from docs/doc-exports
Artem Goncharov dfe3039259
switch to git apply of the generated patch (#12)
switch to git apply of the generated patch

In comparison to a regular diff we have binary files already in patch. It is also created with the purpose to be shared (by email). Try applying it instead.

Reviewed-by: OpenTelekomCloud Bot <None>
2022-05-10 11:01:59 +00:00

156 lines
5.3 KiB
YAML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
- name: Check diff patch presense
ansible.builtin.stat:
path: "{{ apply_doc_patch_diff_patch_file }}"
register: "diff_patch_stat"
- name: Check git patch presense
ansible.builtin.stat:
path: "{{ apply_doc_patch_git_patch_file }}"
register: "git_patch_stat"
- name: Clone {{ apply_doc_patch_repository }} Repository
# no_log: true
command: "git clone https://x-access-token:{{ github_token }}@github.com/{{ apply_doc_patch_repository }} {{ doc_label }}"
args:
chdir: "{{ ansible_user_dir }}"
when: "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- name: Try to apply git patch
command: "git apply --reject --ignore-space-change {{ apply_doc_patch_git_patch_file }}"
args:
chdir: "{{ ansible_user_dir }}/{{ doc_label }}"
ignore_errors: true
when: "git_patch_stat.stat.exists"
# - name: Try to apply diff patch
# command: "patch -p1 -N -f -i {{ apply_doc_patch_patch_file }}"
# args:
# chdir: "{{ ansible_user_dir }}/{{ doc_label }}/{{ apply_doc_patch_target_location }}"
# ignore_errors: true
# when: "diff_patch_stat.stat.exists"
- name: Find patch backup and reject files
find:
paths: "{{ ansible_user_dir }}/{{ doc_label }}/{{ apply_doc_patch_target_location }}"
patterns: "^.*?\\.(?:rej)$"
use_regex: true
recurse: true
register: rej_files
when: "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- name: Prepare patch remainder comment file
template:
dest: "{{ apply_doc_patch_reject_file}}"
src: "patch_remainder_comment.txt.j2"
when:
- "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- "rej_files.matched > 0"
- name: Construct patch remainder
shell: "cat {{ item.path }} >> {{ apply_doc_patch_reject_file}}"
loop: "{{ rej_files.files }}"
when:
- "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- "rej_files.matched > 0"
- name: Finish patch remainder comment file
shell: "echo '```' >> {{ apply_doc_patch_reject_file}}"
when:
- "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- "rej_files.matched > 0"
- name: Drop all interim patch files
command: "find . \\( -name '*.rst.orig' -or -name '*.rst.rej' \\) -exec rm {} \\;"
args:
chdir: "{{ ansible_user_dir }}/{{ doc_label }}/{{ apply_doc_patch_target_location }}"
register: drop_failed
when:
- "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- "rej_files.matched > 0"
- name: Perform git diff to see changes
command: "git diff"
register: diff_output
args:
chdir: "{{ ansible_user_dir }}/{{ doc_label }}/{{ apply_doc_patch_target_location }}"
when: "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- name: Checkout branch
command: "git checkout -b {{ apply_doc_patch_branch_name }}"
args:
chdir: "{{ ansible_user_dir }}/{{ doc_label }}"
when:
- "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- "diff_output.stdout != ''"
- name: Stage files
command: "git add ."
args:
chdir: "{{ ansible_user_dir }}/{{ doc_label }}"
when:
- "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- "diff_output.stdout != ''"
# Maybe put some reference in the commit message
- name: Commit files
command: "git commit -m 'Update content'"
args:
chdir: "{{ ansible_user_dir }}/{{ doc_label }}"
when:
- "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- "diff_output.stdout != ''"
- name: Push changes
command: "git push -u origin {{ apply_doc_patch_branch_name }} --force"
args:
chdir: "{{ ansible_user_dir }}/{{ doc_label }}"
when:
- "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- "diff_output.stdout != ''"
# Gists are not available by GitHub App, do not try it now
# - name: Create patch gist
# command: "{{ apply_doc_patch_gh }} gist create {{ apply_doc_patch_patch_file }} -d '{{ doc_label }} patch file for opentelekomcloud-docs/doc-exports#{{ zuul.change }}'"
# register: gh_gist
# args:
# chdir: "{{ ansible_user_dir }}/{{ doc_label }}"
# when:
# - "patch_stat.stat.exists"
# - "diff_output.stdout != ''"
- name: Generate PR text
template:
dest: "{{ apply_doc_patch_pr_body_file }}"
src: "pr_body.txt.j2"
when:
- "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- "diff_output.stdout != ''"
- name: Search existing Pull Request
command: "{{ apply_doc_patch_gh }} pr list --search 'head:{{ apply_doc_patch_branch_name }}' --json id"
args:
chdir: "{{ ansible_user_dir }}/{{ doc_label }}"
register: "existing_pr"
when:
- "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- "diff_output.stdout != ''"
- name: Open Pull Request
command: "{{ apply_doc_patch_gh }} pr create -B main -F {{ apply_doc_patch_pr_body_file }} -t '{{ apply_doc_patch_pr_title }}' -l {{ apply_doc_patch_pr_label }}"
args:
chdir: "{{ ansible_user_dir }}/{{ doc_label }}"
when:
- "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- "diff_output.stdout != ''"
- "existing_pr.stdout == '[]'"
- name: Post info about apply failures
command: "{{ apply_doc_patch_gh }} pr comment -F {{ apply_doc_patch_reject_file }}"
args:
chdir: "{{ ansible_user_dir }}/{{ doc_label }}"
when:
- "git_patch_stat.stat.exists or diff_patch_stat.stat.exists"
- "diff_output.stdout != ''"
- "rej_files.matched > 0"