Skip to content

DIP Upload Test

DIP Upload Test #67

Workflow file for this run

name: "DIP Upload Test"
on:
workflow_dispatch:
inputs:
am_version:
description: "Archivematica ref (branch, tag or SHA to checkout)"
default: "qa/1.x"
required: true
type: "string"
ss_version:
description: "Archivematica Storage Service ref (branch, tag or SHA to checkout)"
default: "qa/0.x"
required: true
type: "string"
atom_version:
description: "AtoM ref (branch, tag or SHA to checkout)"
default: "qa/2.x"
required: true
type: "string"
jobs:
test:
name: "DIP upload test"
runs-on: "ubuntu-latest"
env:
am_version: "${{ inputs.am_version }}"
ss_version: "${{ inputs.ss_version }}"
atom_version: "${{ inputs.atom_version }}"
steps:
- name: "Check out code"
uses: "actions/checkout@v4"
- name: "Upgrade crun (supports Ubuntu's systemd in the Dockerfile)"
run: |
wget https://github.com/containers/crun/releases/download/1.14.4/crun-1.14.4-linux-amd64
sudo install crun-1.14.4-linux-amd64 /usr/bin/crun
rm crun-1.14.4-linux-amd64
- name: "Install Python"
uses: "actions/setup-python@v5"
with:
python-version: "3.9"
cache: "pip"
cache-dependency-path: |
tests/dip-upload/requirements.txt
- name: "Install ansible"
working-directory: "${{ github.workspace }}/tests/dip-upload"
run: |
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements.txt
- name: "Generate a SSH key and copy it next to the Dockerfile"
run: |
mkdir $HOME/.ssh
ssh-keygen -t rsa -f $HOME/.ssh/id_rsa -N ""
cp $HOME/.ssh/id_rsa.pub ${{ github.workspace }}/tests/dip-upload/ssh_pub_key
- name: "Start the Archivematica VM"
working-directory: "${{ github.workspace }}/tests/dip-upload"
run: |
podman build -t vm-am --build-arg UBUNTU_VERSION=22.04 .
podman run --rm --detach --hostname archivematica --network=bridge -p "2222:22,8000:80,8001:8000" vm-am
- name: "Install Archivematica"
working-directory: "${{ github.workspace }}/tests/dip-upload"
env:
ANSIBLE_HOST_KEY_CHECKING: "False"
ANSIBLE_REMOTE_PORT: 2222
run: |
source .venv/bin/activate
ansible-galaxy install -f -p roles/ -r requirements.yml
ansible-playbook -i localhost, archivematica.yml \
-u ubuntu \
-e "archivematica_src_am_version=${{ env.am_version }} archivematica_src_ss_version=${{ env.ss_version }}" \
-v
- name: "Add the ubuntu user to the archivematica group"
working-directory: "${{ github.workspace }}/tests/dip-upload"
run: |
ssh -o StrictHostKeyChecking=no -p 2222 ubuntu@localhost 'sudo usermod -a -G archivematica ubuntu'
- name: "Get the archivematica SSH public key"
id: archivematica_ssh_pub_key
working-directory: "${{ github.workspace }}/tests/dip-upload"
run: |
echo "key=$(ssh -o StrictHostKeyChecking=no -p 2222 ubuntu@localhost 'sudo cat /var/lib/archivematica/.ssh/id_rsa.pub')" >> $GITHUB_OUTPUT
- name: "Start the AtoM VM"
working-directory: "${{ github.workspace }}/tests/dip-upload"
run: |
podman build -t vm-atom --build-arg UBUNTU_VERSION=20.04 .
podman run --rm --detach --hostname atom --network=bridge -p "9222:22,9000:80,9001:8000" vm-atom
- name: "Install AtoM"
working-directory: "${{ github.workspace }}/tests/dip-upload"
env:
ANSIBLE_HOST_KEY_CHECKING: "False"
ANSIBLE_REMOTE_PORT: 9222
run: |
source .venv/bin/activate
ansible-playbook -i localhost, atom.yml \
-u ubuntu \
-e "atom_repository_version=${{ env.atom_version }} archivematica_ssh_pub_key='${{ steps.archivematica_ssh_pub_key.outputs.key }}'" \
-v
- name: "Call an Archivematica API endpoint"
run: |
curl \
--header "Authorization: ApiKey admin:this_is_the_am_api_key" \
http://localhost:8000/api/processing-configuration/
- name: "Call a Storage Service API endpoint"
run: |
curl \
--header "Authorization: ApiKey admin:this_is_the_ss_api_key" \
http://localhost:8001/api/v2/pipeline/
- name: "Call an AtoM API endpoint"
run: |
curl \
--header "REST-API-Key: this_is_the_atom_dip_upload_api_key" \
http://localhost:9000/index.php/api/informationobjects
- name: "Create a processing configuration for DIP upload"
working-directory: "${{ github.workspace }}/tests/dip-upload"
run: |
ssh -o StrictHostKeyChecking=no -p 2222 ubuntu@localhost "sudo -u archivematica cp /var/archivematica/sharedDirectory/sharedMicroServiceTasksConfigs/processingMCPConfigs/automatedProcessingMCP.xml /var/archivematica/sharedDirectory/sharedMicroServiceTasksConfigs/processingMCPConfigs/dipuploadProcessingMCP.xml"
- name: "Update the DIP upload processing configuration"
working-directory: "${{ github.workspace }}/tests/dip-upload"
run: |
# Change 'Normalize for preservation' to 'Normalize for preservation and access'
ssh -o StrictHostKeyChecking=no -p 2222 ubuntu@localhost "sudo -u archivematica sed --in-place 's|612e3609-ce9a-4df6-a9a3-63d634d2d934|b93cecd4-71f2-4e28-bc39-d32fd62c5a94|g' /var/archivematica/sharedDirectory/sharedMicroServiceTasksConfigs/processingMCPConfigs/dipuploadProcessingMCP.xml"
# Change 'Do not upload DIP' to 'Upload DIP to AtoM/Binder'
ssh -o StrictHostKeyChecking=no -p 2222 ubuntu@localhost "sudo -u archivematica sed --in-place 's|6eb8ebe7-fab3-4e4c-b9d7-14de17625baa|0fe9842f-9519-4067-a691-8a363132ae24|g' /var/archivematica/sharedDirectory/sharedMicroServiceTasksConfigs/processingMCPConfigs/dipuploadProcessingMCP.xml"
- name: "Import Atom sample data"
working-directory: "${{ github.workspace }}/tests/dip-upload"
run: |
ssh -o StrictHostKeyChecking=no -p 9222 ubuntu@localhost "cd /usr/share/nginx/atom/ && sudo -u www-data php -d memory_limit=-1 symfony csv:import /usr/share/nginx/atom/lib/task/import/example/isad/example_information_objects_isad.csv"
ssh -o StrictHostKeyChecking=no -p 9222 ubuntu@localhost "cd /usr/share/nginx/atom/ && sudo -u www-data php -d memory_limit=-1 symfony propel:build-nested-set"
ssh -o StrictHostKeyChecking=no -p 9222 ubuntu@localhost "cd /usr/share/nginx/atom/ && sudo -u www-data php -d memory_limit=-1 symfony cc"
ssh -o StrictHostKeyChecking=no -p 9222 ubuntu@localhost "cd /usr/share/nginx/atom/ && sudo -u www-data php -d memory_limit=-1 symfony search:populate"
- name: "Start a transfer and upload the DIP to the sample archival description"
run: |
curl \
--header "Authorization: ApiKey admin:this_is_the_am_api_key" \
--request POST \
--data "{ \
\"name\": \"dip-upload-test\", \
\"path\": \"$(echo -n '/home/ubuntu/archivematica-sampledata/SampleTransfers/DemoTransferCSV' | base64 -w 0)\", \
\"type\": \"standard\", \
\"processing_config\": \"dipupload\", \
\"access_system_id\": \"example-item\" \
}" \
http://localhost:8000/api/v2beta/package
- name: "Wait for the transfer to finish"
run: |
sleep 180
- name: "Verify a digital object was uploaded and attached to the sample archival description"
run: |
curl \
--header "REST-API-Key: this_is_the_atom_dip_upload_api_key" \
http://localhost:9000/index.php/api/informationobjects/beihai-guanxi-china-1988 | python3 -m json.tool | grep '"parent": "example-item"'