diff --git a/roles/intellij/tasks/install.yml b/roles/intellij/tasks/install.yml new file mode 100644 index 0000000..2789332 --- /dev/null +++ b/roles/intellij/tasks/install.yml @@ -0,0 +1,56 @@ +- name: install jmespath for json_query + become: yes + apt: + update_cache: yes + pkg: + - python3-jmespath + +- name: "Get IntelliJ version" + uri: + url: https://data.services.jetbrains.com/products/releases?code=IIU + body_format: json + register: idea_info + +- name: Create temp dir + file: + path: "{{ tmp_dir }}" + state: directory + +- name: "Download IntelliJ Ultimate" + become: yes + unarchive: + src: "{{ idea_info.json | json_query('IIU[0].downloads.linux.link') }}" + dest: "{{ tmp_dir }}" + remote_src: yes + +- name: get folder name + shell: ls "{{ tmp_dir }}" + register: dir_name + +- name: Check if old version exists + stat: + path: "{{idea_dir}}" + register: intellij_dir + +- name: Move old version if available + become: yes + command: mv {{idea_dir}} {{idea_dir}}-{{local_intellij_version}} + when: + - intellij_dir.stat.exists + +- name: Copy to final directory + become: yes + command: "cp -ra {{ tmp_dir }}/{{ dir_name.stdout }} {{ idea_dir }}" + +- name: Remove temp directory + become: yes + file: + path: "{{ tmp_dir }}" + state: absent + +- name: Create symbolic link + become: yes + file: + src: "/opt/idea/bin/idea.sh" + dest: "/usr/local/bin/idea" + state: link diff --git a/roles/intellij/tasks/main.yml b/roles/intellij/tasks/main.yml index ea69a5a..9d83462 100644 --- a/roles/intellij/tasks/main.yml +++ b/roles/intellij/tasks/main.yml @@ -1,49 +1,24 @@ -- name: install jmespath for json_query - become: yes - apt: - update_cache: yes - pkg: - - python3-jmespath - - name: "Get IntelliJ version" uri: url: https://data.services.jetbrains.com/products/releases?code=IIU body_format: json register: idea_info -- debug: msg="{{ idea_info.json | json_query('IIU[0].downloads.linux.link') }}" +- name: "Check if intellij is installed" + stat: + path: "{{idea_dir}}/product-info.json" + register: local_version_info_file -- name: Create temp dir - file: - path: "{{ tmp_dir }}" - state: directory +- name: "Check installed version" + when: + - local_version_info_file.stat.exists + shell: cat {{idea_dir}}/product-info.json + register: local_version_info_file -- name: "Download IntelliJ Ultimate" - become: yes - unarchive: - src: "{{ idea_info.json | json_query('IIU[0].downloads.linux.link') }}" - dest: "{{ tmp_dir }}" - remote_src: yes +- name: "Set version info fact" + set_fact: + local_intellij_version: "{{ local_version_info_file.stdout | from_json | json_query('version') }}" + upstream_intellij_version: "{{ idea_info.json | json_query('IIU[0].version') }}" -- name: get folder name - shell: ls "{{ tmp_dir }}" - register: dir_name - - - -- name: Copy to final directory - become: yes - command: "cp -ra {{ tmp_dir }}/{{ dir_name.stdout }} {{ idea_dir }}" - -- name: Remove temp directory - become: yes - file: - path: "{{ tmp_dir }}" - state: absent - -- name: Create symbolic link - become: yes - file: - src: "/opt/idea/bin/idea.sh" - dest: "/usr/local/bin/idea" - state: link +- import_tasks: install.yml + when: local_version_info_file is undefined or local_intellij_version != upstream_intellij_version