├── ansible ├── playbooks │ └── sync_release.yml ├── inventory │ └── hosts.yml └── roles │ └── bioc_sync │ ├── templates │ └── paths.j2 │ └── tasks │ └── main.yml ├── README.md └── .github └── workflows └── sync-release.yml /ansible/playbooks/sync_release.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Sync Bioconductor Release 3 | hosts: bioc_vm 4 | become: yes 5 | vars: 6 | bioc_version: "{{ biocver | default('3.19') }}" 7 | roles: 8 | - bioc_sync 9 | -------------------------------------------------------------------------------- /ansible/inventory/hosts.yml: -------------------------------------------------------------------------------- 1 | all: 2 | hosts: 3 | bioc_vm: 4 | ansible_host: "{{ lookup('env', 'BIOC_VM_IP') }}" 5 | ansible_user: ubuntu 6 | ansible_ssh_private_key_file: "{{ lookup('env', 'SSH_KEY_PATH') }}" 7 | -------------------------------------------------------------------------------- /ansible/roles/bioc_sync/templates/paths.j2: -------------------------------------------------------------------------------- 1 | {{ bioc_version }}/books/bin 2 | {{ bioc_version }}/bioc/bin 3 | {{ bioc_version }}/data/annotation/bin 4 | {{ bioc_version }}/data/experiment/bin 5 | {{ bioc_version }}/workflows/bin 6 | {{ bioc_version }}/books/src 7 | {{ bioc_version }}/bioc/src 8 | {{ bioc_version }}/data/annotation/src 9 | {{ bioc_version }}/data/experiment/src 10 | {{ bioc_version }}/workflows/src 11 | {{ bioc_version }}/BiocViews 12 | {{ bioc_version }}/BiocViews.html 13 | {{ bioc_version }}/index.html 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Bioconductor Auto Archive Release 2 | 3 | This repository contains automation scripts for archiving Bioconductor releases. 4 | 5 | ## Required GitHub Secrets 6 | 7 | - `BIOC_VM_IP`: IP address of the VM where the sync will run 8 | - `VM_SSH_KEY`: SSH private key for accessing the VM 9 | - `RSYNC_PRIVATE_KEY`: Private key for rsync authentication 10 | - `RCLONE_CONF_CONTENTS`: Complete rclone configuration file contents 11 | 12 | 13 | ## Usage 14 | 15 | 1. Go to Actions tab 16 | 2. Select "Sync Bioconductor Release" workflow 17 | 3. Click "Run workflow" 18 | 4. Enter the Bioconductor version to sync 19 | 5. Click "Run workflow" 20 | 21 | -------------------------------------------------------------------------------- /ansible/roles/bioc_sync/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Create work directory 3 | file: 4 | path: "/tmp/bioc_sync" 5 | state: directory 6 | mode: '0755' 7 | 8 | - name: Copy rsync key 9 | copy: 10 | content: "{{ lookup('env', 'RSYNC_PRIVATE_KEY') }}" 11 | dest: "/tmp/bioc_sync/rsync-key.pem" 12 | mode: '0600' 13 | 14 | - name: Create temporary rclone config directory 15 | file: 16 | path: "/tmp/bioc_sync/rclone" 17 | state: directory 18 | mode: '0700' 19 | 20 | - name: Write rclone config 21 | copy: 22 | content: "{{ lookup('env', 'RCLONE_CONF_CONTENTS') }}" 23 | dest: "/tmp/bioc_sync/rclone/rclone.conf" 24 | mode: '0600' 25 | 26 | - name: Create paths file 27 | template: 28 | src: paths.j2 29 | dest: /tmp/paths 30 | mode: '0644' 31 | 32 | - name: Run rsync 33 | shell: | 34 | rsync -e "ssh -i /tmp/bioc_sync/rsync-key.pem" -zrtlv bioc-rsync@master.bioconductor.org:{{ bioc_version }} ./ 35 | 36 | - name: Run rclone sync 37 | environment: 38 | RCLONE_CONFIG: "/tmp/bioc_sync/rclone/rclone.conf" 39 | shell: | 40 | cat /tmp/paths | xargs -i rclone copyto -vvv ./{} osn:/bir190004-bucket01/archive.bioconductor.org/packages/{} 41 | 42 | - name: Cleanup 43 | file: 44 | path: "/tmp/bioc_sync" 45 | state: absent 46 | -------------------------------------------------------------------------------- /.github/workflows/sync-release.yml: -------------------------------------------------------------------------------- 1 | name: Sync Bioconductor Release 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | bioc_version: 7 | description: 'Bioconductor version to sync' 8 | required: true 9 | default: '3.19' 10 | 11 | jobs: 12 | sync: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v4 16 | 17 | - name: Install Ansible 18 | run: | 19 | sudo apt update 20 | sudo apt install -y ansible 21 | 22 | - name: Set up SSH key 23 | run: | 24 | mkdir -p ~/.ssh 25 | echo "${{ secrets.VM_SSH_KEY }}" > ~/.ssh/vm_key 26 | chmod 600 ~/.ssh/vm_key 27 | echo "${{ secrets.RSYNC_PRIVATE_KEY }}" > rsync-key.pem 28 | chmod 600 rsync-key.pem 29 | 30 | - name: Run Ansible playbook 31 | env: 32 | BIOC_VM_IP: ${{ secrets.BIOC_VM_IP }} 33 | SSH_KEY_PATH: ~/.ssh/vm_key 34 | RSYNC_PRIVATE_KEY: ${{ secrets.RSYNC_PRIVATE_KEY }} 35 | RCLONE_CONF_CONTENTS: ${{ secrets.RCLONE_CONF_CONTENTS }} 36 | run: | 37 | ansible-playbook -i ansible/inventory/hosts.yml \ 38 | ansible/playbooks/sync_release.yml \ 39 | --extra-vars "biocver=${{ github.event.inputs.bioc_version }}" 40 | --------------------------------------------------------------------------------