diff --git a/.github/workflows/live-preview.yaml b/.github/workflows/live-preview.yaml new file mode 100644 index 00000000..a1fb307e --- /dev/null +++ b/.github/workflows/live-preview.yaml @@ -0,0 +1,75 @@ +name: Preview PR on galaxy.odahub.fr +on: + pull_request: + branches: + - main + types: + - opened + - labeled + - synchronize + paths-ignore: + - '.github/**' + - 'deprecated/**' + - 'docs/**' + - '*' +env: + GALAXY_FORK: galaxyproject + GALAXY_BRANCH: release_23.1 + +jobs: + setup: + if: contains( github.event.pull_request.labels.*.name, 'test-live') + name: Determine changed repositories + runs-on: ubuntu-latest + outputs: + tool-list: ${{ steps.discover.outputs.tool-list }} + steps: + - uses: actions/setup-python@v4 + with: + python-version: "3.7" + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Fake a Planemo run to determine tool list + uses: galaxyproject/planemo-ci-action@v1 + id: discover + with: + galaxy-fork: ${{ env.GALAXY_FORK }} + galaxy-branch: ${{ env.GALAXY_BRANCH }} + python-version: "3.7" + - name: Show tool list + run: echo '${{ steps.discover.outputs.tool-list }}' + + # deploy the tools + deploy: + name: Deploy + if: contains( github.event.pull_request.labels.*.name, 'test-live') && needs.setup.outputs.tool-list + needs: setup + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Install requirenments + run: sudo apt-get install -y ansible + - name: Install SSH key + uses: shimataro/ssh-key-action@v2 + with: + key: ${{ secrets.SSH_PRIVATE_KEY }} + known_hosts: ${{ secrets.KNOWN_HOSTS }} + - name: Deploy tools + env: + TOOL_LIST: ${{ needs.setup.outputs.tool-list }} + pr_num: ${{ github.event.pull_request.number }} + run: | + cd deploy-preview + + dir_list=`for tl in $TOOL_LIST ; do echo $tl | awk -F '/' '{print $2}'; done | uniq` + + for dr in $dir_list; do + tools_list=`for tl in $TOOL_LIST; do if [[ "$tl" == *"$dr"* ]] ; then basename $tl ; fi ; done` + + export tools_list + export tool_dir=$dr + + ansible-playbook deploy.yml + done diff --git a/deploy-preview/ansible.cfg b/deploy-preview/ansible.cfg new file mode 100644 index 00000000..a62a3728 --- /dev/null +++ b/deploy-preview/ansible.cfg @@ -0,0 +1,6 @@ +[defaults] +inventory = hosts +timeout = 60 + +[ssh_connection] +pipelining = true diff --git a/deploy-preview/deploy.yml b/deploy-preview/deploy.yml new file mode 100644 index 00000000..23019223 --- /dev/null +++ b/deploy-preview/deploy.yml @@ -0,0 +1,49 @@ +--- +- hosts: all + become: true + become_user: root + vars: + src_tools_dir: ../tools + dest_tools_dir: /srv/galaxy/staging_tools + dest_tools_conf: /srv/galaxy/server/config/staging_tool_conf.xml + tools_list: "{{ lookup('env', 'tools_list').split() }}" + tool_dir: "{{ lookup('env', 'tool_dir') }}" + pr_num: "{{ lookup('env', 'pr_num') }}" + + + tasks: + - name: Sync tool dir + ansible.posix.synchronize: + src: "{{ src_tools_dir }}/{{ tool_dir }}/" + dest: "{{ dest_tools_dir }}/{{ tool_dir }}_pr{{ pr_num }}" + rsync_opts: + - "--chown=galaxy:galaxy" + + - name: Make id unique + replace: + path: "{{ dest_tools_dir }}/{{ tool_dir }}_pr{{ pr_num }}/{{ item }}" + regexp: '' + loop: "{{ tools_list }}" diff --git a/deploy-preview/hosts b/deploy-preview/hosts new file mode 100644 index 00000000..0b985aab --- /dev/null +++ b/deploy-preview/hosts @@ -0,0 +1,2 @@ +[all] +galaxy.odahub.fr ansible_ssh_user=ubuntu \ No newline at end of file