project-workflow #273
This file contains hidden or 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: project-workflow | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| BUILD_VARS_JSON: | |
| description: 'Build var json file' | |
| required: true | |
| jobs: | |
| build-project: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Capture start date and time | |
| id: start_time | |
| run: echo "start_time=$(date -u)" >> $GITHUB_ENV | |
| - name: Add start time to build_vars.json | |
| run: | | |
| modified_json=$(echo '${{ github.event.inputs.BUILD_VARS_JSON }}' | jq '.buildstats += { "${{ github.event.repository.name }}-start": "${{ env.start_time }}" }' ) | |
| BUILD_VARS_JSON=$(echo "$modified_json" | jq -c '.') | |
| echo "BUILD_VARS_JSON=$BUILD_VARS_JSON" >> $GITHUB_ENV | |
| echo "**** next next ****" | |
| echo "BUILD_VARS_JSON=$BUILD_VARS_JSON" | |
| - name: Get build vars from input file | |
| id: extract_build_vars | |
| run: | | |
| BUILD_OS=$(echo "$BUILD_VARS_JSON" | jq -r '.buildstats.OS' ) | |
| BUILD_BRANCH=$(echo "$BUILD_VARS_JSON" | jq -r '.buildstats.BUILD_BRANCH' ) | |
| BUILD_TYPE=$(echo "$BUILD_VARS_JSON" | jq -r '.buildstats.BUILD_TYPE' ) | |
| BUILD_REPO=$(echo "$BUILD_VARS_JSON" | jq -r '.buildstats.BUILD_REPO' ) | |
| echo "BUILD_OS=$BUILD_OS" >> $GITHUB_ENV | |
| echo "BUILD_BRANCH=$BUILD_BRANCH" >> $GITHUB_ENV | |
| echo "BUILD_TYPE=$BUILD_TYPE" >> $GITHUB_ENV | |
| echo "BUILD_REPO=$BUILD_REPO" >> $GITHUB_ENV | |
| - name: Check out Repo | |
| uses: actions/checkout@v4 | |
| - name: Fetch workflow script from projects | |
| env: | |
| github-token: ${{ secrets.GIT_ACTIONS }} | |
| run: | | |
| git clone https://github.com/perfsonar/project.git project | |
| case "${{ env.BUILD_OS }}" in | |
| 'ol8'|'el9') | |
| cp project/toolbox/workflows/create-el-repo.sh . | |
| ;; | |
| 'd11'|'d12'|'u20'|'u22'|'u24') | |
| cp project/toolbox/workflows/github-db-workflow.sh . | |
| ;; | |
| esac | |
| - name: Extract dependencies | |
| id: extract_deps | |
| run: | | |
| echo "$BUILD_VARS_JSON" | jq -r '.repos[] | select(.name == "${{ github.event.repository.name }}") | .deps[]' > deps.txt | |
| case "${{ env.BUILD_OS }}" in | |
| 'u20'|'u22'|'u24') | |
| sed -i '/minor-packages/d' deps.txt | |
| ;; | |
| *) | |
| echo "No specific packages to remove" | |
| ;; | |
| esac | |
| echo "Dependencies:" | |
| cat deps.txt | |
| - name: Download artifacts | |
| run: | | |
| mkdir -p artifacts | |
| while IFS= read -r repo; do | |
| echo "Downloading artifact for $repo" | |
| run_id=$(echo "$BUILD_VARS_JSON" | jq -r ".buildids | .[\"$repo\"]") | |
| echo "rund id $run_id" | |
| gh run download $run_id --repo perfsonar/$repo -D artifacts/$repo --name "$repo-${{ env.BUILD_OS }}" | |
| artifact_path="artifacts/$repo" | |
| pwd | |
| echo "list artifact path" | |
| ls -al "$artifact_path" | |
| case "${{ env.BUILD_OS }}" in | |
| 'ol8'|'el9') | |
| mkdir -p artifacts/RPMS | |
| echo "copy to the artifacts RPM dir" | |
| cp "$artifact_path"/RPMS/*.rpm artifacts/RPMS | |
| ;; | |
| 'd11'|'d12'|'u20'|'u22'|'u24') | |
| ls -al artifacts/* | |
| ;; | |
| esac | |
| done < deps.txt | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GIT_ACTIONS }} | |
| - name: list files | |
| run: | | |
| pwd | |
| ls -al artifacts | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ github.event.repository.name }}-${{ env.BUILD_OS }} | |
| path: artifacts | |
| retention-days: 5 | |
| - name: Set up SSH | |
| run: | | |
| mkdir -p ~/.ssh | |
| - name: Install SSH Key | |
| uses: shimataro/ssh-key-action@v2 | |
| with: | |
| key: ${{ secrets.SERVER_SSH_KEY }} | |
| known_hosts: ${{ secrets.SERVER_HOST }} | |
| - name: sign and copy artifact to server | |
| run: | | |
| case "${{ env.BUILD_OS }}" in | |
| 'ol8'|'el9') | |
| if [ "${{ env.BUILD_OS }}" = 'ol8' ]; then | |
| echo "ol8" | |
| el_version="8" | |
| os_dir="el" | |
| else | |
| echo "el9" | |
| el_version="9" | |
| os_dir="el" | |
| fi | |
| echo "Prep the keys" | |
| echo "${{ secrets.GPG_PRIVATE_KEY }}" > private.key | |
| echo "${{ secrets.GPG_PASSPHRASE }}" | tr -d '\r\n' > passphrase.txt | |
| chmod 600 private.key passphrase.txt | |
| echo "import keys" | |
| gpg --batch --import private.key | |
| KEYID=$(gpg --list-secret-keys --with-colons | awk -F: '/^sec/ { print $5; exit }') | |
| echo "KEYID=$KEYID" >> $GITHUB_ENV | |
| echo "KEYID=$KEYID" | |
| # Write variables to the file | |
| file="variables.txt" | |
| echo "repo=$repo" > $file | |
| echo "build_branch=${{ env.BUILD_BRANCH }}" >> $file | |
| echo "el_version=$el_version" >> $file | |
| echo "os_dir=$os_dir" >> $file | |
| echo "Create the repo" | |
| curl -s https://raw.githubusercontent.com/perfsonar/docker-oneshot-builder/main/build | sh -s - --run create-el-repo.sh . "${{ env.BUILD_OS }}" | |
| echo "Call the oneshot signer" | |
| curl -s https://raw.githubusercontent.com/perfsonar/docker-oneshot-signer/main/sign \ | |
| | sh -s - --passphrase passphrase.txt ./artifacts/RPMS "$KEYID" | |
| echo "Create the repo" | |
| curl -s https://raw.githubusercontent.com/perfsonar/docker-oneshot-builder/main/build | sh -s - --run create-el-repo.sh . "${{ env.BUILD_OS }}" | |
| echo "Rsync to the distro servers" | |
| ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${{ secrets.SERVER_PORT }} distro@${{ secrets.SERVER_HOST }} "mkdir -p /home/distro/distro/rpm/${{ env.BUILD_REPO }}/$os_dir/$el_version/x86_64/perfsonar/${{ env.BUILD_BRANCH }}/RPMS" | |
| rsync -avz --delete -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${{ secrets.SERVER_PORT }}" ./artifacts/RPMS/ distro@${{ secrets.SERVER_HOST }}:/home/distro/distro/rpm/${{ env.BUILD_REPO }}/$os_dir/$el_version/x86_64/perfsonar/${{ env.BUILD_BRANCH }}/RPMS | |
| ;; | |
| 'd11'|'d12'|'u20'|'u22'|'u24') | |
| rsync -avz --delete -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${{ secrets.SERVER_PORT }}" ./artifacts/ distro@${{ secrets.SERVER_HOST }}:/home/distro/distro/debian/${{ env.BUILD_REPO }}/${{ env.BUILD_OS }} | |
| ;; | |
| esac | |
| - name: Capture end date and time | |
| id: end_time | |
| run: echo "end_time=$(date -u)" >> $GITHUB_ENV | |
| - name: Add end time to build_vars.json | |
| run: | | |
| modified_json=$(echo "$BUILD_VARS_JSON" | jq '.buildstats += { "${{ github.event.repository.name }}-end": "${{ env.end_time }}" }' ) | |
| BUILD_VARS_JSON=$(echo "$modified_json" | jq -c '.') | |
| echo "BUILD_VARS_JSON=$BUILD_VARS_JSON" >> $GITHUB_ENV | |
| echo "BUILD_VARS_JSON=$BUILD_VARS_JSON" | |
| - name: Add and display end time in BUILD_VARS_JSON | |
| run: | | |
| updated_json=$(echo "$BUILD_VARS_JSON" | jq '.buildstats += {"end_time": "${{ env.end_time }}"}') | |
| echo "$updated_json" | |
| echo "Misson accomplished!!" | |