Manually sync Github Open Data repository and its metadata to OpenCoDE.de #30
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Sync Github Open Data repository and its metadata to OpenCoDE.de | |
on: | |
workflow_dispatch: | |
workflow_run: | |
workflows: ["Create release on tag push"] | |
types: | |
- completed | |
env: | |
# OpenCoDE Metadata | |
GROUP_ID: 2781 | |
ACCESS_USER: RKIOpenData | |
# The repository name must not start or end with a special character and must not contain consecutive special characters | |
REPO_PATH: ${{ github.event.repository.name }} | |
ZENODOJSON_PATH: Metadaten/zenodo.json | |
jobs: | |
sync_metadata_to_opencode: | |
name: Sync Open Data metadata to OpenCoDE | |
runs-on: ubuntu-latest | |
outputs: | |
GROUP_PATH: ${{ steps.group_path.outputs.GROUP_PATH }} | |
steps: | |
# Get OpenCoDE group path from the OpenCoDE API | |
- name: Get OpencoDE group path | |
id: group_path | |
run: | | |
GROUP_INFO=$(curl \ | |
--request GET "https://gitlab.opencode.de/api/v4/groups/$GROUP_ID" \ | |
--header "PRIVATE-TOKEN: ${{ secrets.OPENCODE_TOKEN }}") | |
# Add metadata to enviroment | |
echo "GROUP_PATH="$(echo $GROUP_INFO | jq -r '.path')"" >> $GITHUB_OUTPUT | |
# Get metadata on name, description and keywords from the zenodo.json | |
- name: Get zenodo.json metadata from Github Open Data repository | |
run: | | |
ZENODOJSON_URL=$(curl \ | |
--request GET https://api.github.com/repos/${{ github.repository }}/contents/${{ env.ZENODOJSON_PATH }} \ | |
--header "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
--header "Accept: application/vnd.github.mercy-preview+json" \ | |
| jq -r '.download_url') | |
# Add Zenodo metadata to enviroment | |
echo "REPO_NAME="$(curl $ZENODOJSON_URL | jq -r '.title')"" >> $GITHUB_ENV | |
echo "DESCRIPTION="$(curl $ZENODOJSON_URL | jq -r '.description'| head -c 2000)"" >> $GITHUB_ENV | |
echo "TOPICS="$(curl $ZENODOJSON_URL| jq -r '.keywords | join(",")')"" >> $GITHUB_ENV | |
- name: Create OpenCoDE repository and update repository metadata | |
run: | | |
# Create OpenCoDE repository | |
curl \ | |
--request POST "https://gitlab.opencode.de/api/v4/projects" \ | |
--header "PRIVATE-TOKEN: ${{ secrets.OPENCODE_TOKEN }}" \ | |
--data-urlencode "path=${{ env.REPO_PATH }}" \ | |
--data-urlencode "namespace_id=${{ env.GROUP_ID }}" | |
# Update OpenCoDE repository metadata | |
response=$(curl \ | |
--request PUT "https://gitlab.opencode.de/api/v4/projects/${{ steps.group_path.outputs.GROUP_PATH }}%2F${{ env.REPO_PATH }}" \ | |
--header "PRIVATE-TOKEN: ${{ secrets.OPENCODE_TOKEN }}" \ | |
--data "name=${{ env.REPO_NAME }}" \ | |
--data "description=${{ env.DESCRIPTION }}" \ | |
--data "topics=${{ env.TOPICS }}" \ | |
--data "visibility=public") | |
sync_data_to_opencode: | |
name: Sync Github Open Data repository data to OpenCoDE | |
needs: sync_metadata_to_opencode | |
runs-on: ubuntu-latest | |
steps: | |
# Clone Github Open Data repository into the action enviroment | |
- name: Checkout Github repository | |
uses: actions/checkout@v3 | |
with: | |
persist-credentials: false | |
lfs: 'true' | |
ref: 'main' | |
fetch-depth: '0' | |
# Force push latest Github Open Data repository status to OpenCoDE | |
- name: Force push latest status to OpenCoDE | |
run: | | |
git remote add opencode https://${{ env.ACCESS_USER }}:${{ secrets.OPENCODE_TOKEN }}@gitlab.opencode.de/${{ needs.sync_metadata_to_opencode.outputs.GROUP_PATH }}/${{ env.REPO_PATH }}.git | |
git push opencode -f | |
git push opencode -f --tags | |