- name: Automatically generate RPMs from CLK git repo hosts: localhost vars: - arch: "amd64" - deps: - gcc-c++ - mesa-libGL-devel - python3-github3py - python3-scons - SDL2-devel - zlib-devel - github_repo: "CLK" - github_user: "TomHarte" - packageName: "{{ github_repo }}" - releaseURL: "https://github.com/TomHarte/CLK/releases/latest" - rpmLicense: "MIT" - rpmSummary: "A latency-hating emulator of 8- and 16-bit platforms: the Acorn Electron, Amstrad CPC, Apple II/II+/IIe and early Macintosh, Atari 2600 and ST, ColecoVision, Commodore Vic-20, MSX 1, Oric 1/Atmos, Sega Master System and Sinclair ZX80/81." - rpmTools: - pandoc - rpm-build - rpmdevtools # - version: "head" - version: "current" # - version: "2020-05-10" tasks: - name: set the date set_fact: dateStamp: "{{ lookup('pipe','date \"+%0d %B %Y\"') }}" - name: install required rpm development tools package: name: "{{ item }}" state: latest with_items: - "{{ rpmTools }}" - "{{ deps }}" become: yes - name: create rpm development tree in user home directory command: rpmdev-setuptree - name: create temp working directory tempfile: state: directory prefix: "{{ packageName }}." register: tempdir - name: Find current release tag github_release: user: "{{ github_user }}" repo: "{{ github_repo }}" action: latest_release register: release_data - name: Fetch HEAD git: repo: "https://github.com/{{ github_user }}/{{ github_repo }}.git" dest: "{{ tempdir.path }}/source" version: "HEAD" when: version == "head" - name: Fetch current release git: repo: "https://github.com/{{ github_user }}/{{ github_repo }}.git" dest: "{{ tempdir.path }}/source" version: "{{ release_data.tag }}" when: version == "current" - name: Fetch named release git: repo: "https://github.com/{{ github_user }}/{{ github_repo }}.git" dest: "{{ tempdir.path }}/source" version: "{{ version }}" when: ( version != "current" ) and ( version != "head" ) - name: set the release variable (head) set_fact: version: "git{{ ansible_date_time.epoch }}" when: version == "head" - name: set the release variable (current) set_fact: version: "{{ release_data.tag | regex_replace( '-','' ) }}" when: version == "current" - debug: var: version - name: convert README.md to text for packaging command: "pandoc -f markdown -t plain --wrap=none {{ tempdir.path }}/source/README.md -o {{ tempdir.path }}/source/README.txt" - name: set description from README.txt slurp: src: "{{ tempdir.path }}/source/README.txt" register: readme - debug: msg: "{{ readme['content'] | b64decode }}" - name: create symlink to checkout dir with version file: src: "{{ tempdir.path }}/source" dest: "{{ tempdir.path }}/{{ packageName }}-{{ version }}" state: link - name: create the new source archive archive: dest: "{{ ansible_env.HOME }}/rpmbuild/SOURCES/{{ packageName }}-{{ version }}.tar" path: "{{ tempdir.path }}/{{ packageName }}-{{ version }}" format: tar - name: template the man page to the sources directory template: src: "clksignal.1.j2" dest: "{{ ansible_env.HOME }}/rpmbuild/SOURCES/clksignal.1" - name: compress the man page archive: path: "{{ ansible_env.HOME }}/rpmbuild/SOURCES/clksignal.1" dest: "{{ ansible_env.HOME }}/rpmbuild/SOURCES/clksignal.1.gz" format: gz remove: Yes - name: remove existing spec files file: path: "{{ ansible_env.HOME }}/rpmbuild/SPECS/{{ packageName }}-{{ version }}.spec" state: absent - name: create spec file from template template: src: package.spec.j2 dest: "{{ ansible_env.HOME }}/rpmbuild/SPECS/{{ packageName }}-{{ version }}.spec" - name: build rpm command: "rpmbuild -bb {{ ansible_env.HOME }}/rpmbuild/SPECS/{{ packageName }}-{{ version }}.spec" register: rpmbuild - debug: var: rpmbuild - name: register rpmbuild output file variable set_fact: rpmBuildOut: "{{ tempdir.path }}/rpmbuild.out" - name: write output to file copy: content: "{{ rpmbuild.stdout }}" dest: "{{ rpmBuildOut }}" - name: set the rpm file variable set_fact: rpmFile: "{{ lookup( 'pipe', 'egrep ^Wrote:\ ' + rpmBuildOut ) }}" - debug: var: rpmFile - name: update the rpm file variable set_fact: rpmFile: "{{ rpmFile | regex_replace('^Wrote: ', '' ) }}" - debug: var: rpmFile - name: install package package: name: "{{ rpmFile }}" state: latest become: true # - name: remove temp directory # file: # path: "{{ tempdir.path }}" # state: absent