initial commit

This commit is contained in:
Patrick MARIE 2024-10-02 23:14:50 +02:00
commit 46ac68822c
Signed by: mycroft
GPG Key ID: BB519E5CD8E7BFA7
18 changed files with 937 additions and 0 deletions

40
.github/workflows/backup.yaml vendored Normal file
View File

@ -0,0 +1,40 @@
name: Run backup
on:
schedule:
- cron: '30 * * * 1-5'
push:
branches:
- main
workflow_dispatch:
inputs:
num:
description: 'Number of commit to backup (0: unlimited)'
required: true
default: '10'
jobs:
backup-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set num default value
run: |
NUM=${{ github.event.inputs.num }}
echo "NUM=${NUM:-10}" >> $GITHUB_ENV
- name: Run backup script
run: |
/bin/bash scripts/backup.sh -r https://github.com/descartes-underwriting/devops-technical-test-data.git -b 01-01-2022-test -n ${{ env.NUM }}
/bin/bash scripts/backup.sh -r https://github.com/descartes-underwriting/devops-technical-test-data.git -b main -d $(pwd)/data_main -n ${{ env.NUM }}
- name: Commit and push changes
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add data data_main
git commit -m "Auto-update from backup job" || exit 0
git push

17
.github/workflows/tests.yaml vendored Normal file
View File

@ -0,0 +1,17 @@
name: Tests
on:
push:
branches:
- main
jobs:
tests:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Run tests
run: |
/bin/bash scripts/tests.sh

49
README.md Normal file
View File

@ -0,0 +1,49 @@
# backup.sh ~ descartes underwriting technical test for devops
The script takes as input a repository url, a branch, a destination directory and optionally a number of commit to backup, verbose mode, debug mode.
It checkouts a git repository, list all commits in a given branch (from oldest to most recent), and for each commit sha checks if it was already backuped (check for ${DATA_DIR}/<commit sha> directory), and if not, checks out all files mentionned in commit and dump their state at given commit into the per commit given directory.
The included workflow that actually performs the backup can be manually run through github UI.
## Usage
```sh
$ /bin/bash scripts/backup.sh -r <repository> -b <branch> -d </path/to/data> [-n <commit limit>] [-v] [-x]
```
Ex:
```sh
$ /bin/bash scripts/backup.sh -r https://github.com/descartes-underwriting/devops-technical-test-data.git -b 01-01-2022-test -d $(pwd)/data -n 5
Cloning into 'devops-technical-test-data'...
remote: Enumerating objects: 21265, done.
...
new commit: 282180fe7e5d9cbf297f2f0ef813cffe60ce2328
new commit: 46fe26c9dcf2354a0ed3f304ed6818de9606f7b5
new commit: 21e5331d1c0256701bb90cf017e519d54a88f618
new commit: 47998b5317e66b3bd456cfb07268c93e223704f2
new commit: 7c5aebc1feeef4eaf19083019547457b8cf3fc3d
done: 5
$ ls -l data/
total 0
drwxr-xr-x 1 patrick chicac 8 Jan 1 09:28 21e5331d1c0256701bb90cf017e519d54a88f618
drwxr-xr-x 1 patrick chicac 18 Jan 1 09:28 282180fe7e5d9cbf297f2f0ef813cffe60ce2328
drwxr-xr-x 1 patrick chicac 14 Jan 1 09:28 46fe26c9dcf2354a0ed3f304ed6818de9606f7b5
drwxr-xr-x 1 patrick chicac 14 Jan 1 09:28 47998b5317e66b3bd456cfb07268c93e223704f2
drwxr-xr-x 1 patrick chicac 14 Jan 1 09:28 7c5aebc1feeef4eaf19083019547457b8cf3fc3d
$
```
Check `.github/workflows/backup.yaml` for usage sample.
## Tests
A sample test script exists to verify basic use case of backup'ing a limited number of commits. The `scripts/test.sh` runs a couple of backups and run a `diff -r` against a manually verified backup included in the repository. A workflow runs tests on push.
## Not covered / Improvements ideas
- Deleted files in commits; The backup.sh script does not cover deleted files;
- Keep track of latest commit backuped to allow iterative backups. As for now, the script checks all commits (which is not really efficient); However, if latest commit backup is tracked and this commit to be overwritten by a force push, it will be eventually required to re-do the whole backup.

109
scripts/backup.sh Normal file
View File

@ -0,0 +1,109 @@
#!/bin/sh
set -e
REPOSITORY=https://github.com/descartes-underwriting/devops-technical-test-data.git
BRANCH=main
DATA_DIR=$(pwd)/data
MAX_NUM=0
VERBOSE=0
while getopts ":r:b:d:vxn:" opt
do
case ${opt} in
r)
REPOSITORY=${OPTARG}
;;
b)
BRANCH=${OPTARG}
;;
d)
DATA_DIR=${OPTARG}
;;
n)
MAX_NUM=${OPTARG}
;;
v)
VERBOSE=1
;;
x)
set -x
;;
?)
echo "Invalid option -${OPTARG}"
exit 1
;;
esac
done
IFS="
"
GIT=git
GIT_OPTS=(-c core.quotepath=false)
if test ! -d ${DATA_DIR}
then
mkdir -p ${DATA_DIR}
fi
TMPDIR=$(mktemp -d)
cd ${TMPDIR}
git clone ${REPOSITORY} && cd ./*
# List all commit sha, from older to newer;
COMMIT_SHAS=$($GIT ${GIT_OPTS[@]} log --reverse --pretty=format:"%H" remotes/origin/${BRANCH})
NUM_ADDED=0
for COMMIT_SHA in ${COMMIT_SHAS}
do
if test -d ${DATA_DIR}/${COMMIT_SHA}
then
# commit already backup; skipping
continue
fi
echo "new commit: ${COMMIT_SHA}"
# There are malformed files names that are creating complex filenames to parse.
# Those malformed filenames are double quotes, so to remove quotes, -c core.quotepath=false
# and -z are used. sed 's/\x0//g' is removing the null byte
FILES=$($GIT ${GIT_OPTS[@]} show --pretty= --name-only -z ${COMMIT_SHA} | sed 's/\x0//g')
if test -z ${FILES}
then
# merge commit, etc. There is no file here.
echo "No file was found in commit ${COMMIT_SHA}; skipping"
continue
fi
TARGET_BACKUP_SHA=${DATA_DIR}/${COMMIT_SHA}
mkdir -p ${TARGET_BACKUP_SHA}
for FILE in ${FILES}
do
TARGET_DIR=$(dirname ${FILE})
mkdir -p ${TARGET_BACKUP_SHA}/${TARGET_DIR}
if test ${VERBOSE} -eq 1
then
echo "Writing ${TARGET_BACKUP_SHA}/${FILE}"
fi
# ${FILE} contains path/to/file
$GIT ${GIT_OPTS[@]} show ${COMMIT_SHA}:${FILE} > ${TARGET_BACKUP_SHA}/${FILE}
done
NUM_ADDED=$((NUM_ADDED + 1))
if test ${NUM_ADDED} -eq ${MAX_NUM}
then
echo "Max commit to backup reached; stopping."
break
fi
done
echo "done: ${NUM_ADDED}"

26
scripts/tests.sh Normal file
View File

@ -0,0 +1,26 @@
#!/bin/sh
run_test() {
echo "Running backup on branch main; dest $1; num: $2..."
/bin/bash scripts/backup.sh -b main -d $1 -n $2
echo
diff -r $1 tests/tests_cases/$2
if test $? -ne 0
then
echo "Test fail"
exit 1
fi
echo "... done"
echo
}
ROOTDIR=$(git rev-parse --show-toplevel)
TMPDIR=$(mktemp -d)
cd ${ROOTDIR}
run_test ${TMPDIR}/1 1
run_test ${TMPDIR}/2 2
run_test ${TMPDIR}/10 10
echo "All tests were OK"

View File

@ -0,0 +1,78 @@
# Descartes Underwriting
## Context
We wish to create a backup tool that will save only the last modified files of a storage unit.
In our example, the storage unit is **not a bucket**.
The storage unit is a git repository called `devops-technical-test-data`.
The repository `devops-technical-test-data` is not frozen and will have new commits.
Commits will be added to the `datestamp-test` branch on the `devops-technical-test-data` repository.
## Task
Develop a backup tool to save the modified files at each commit.
### Submission
Script and data should be saved on a private `descartes-backup-project` repository on your github account.
Access should be granted to all members of the `descartes-underwriting` group:
<https://github.com/orgs/descartes-underwriting/people>
### Script
Create a script to automate the backup process using open source software.
The script should track the branch `datestamp-test` of the repository.
The execution of the script should be carried with a github-action / gitlab-pipeline or any other git automated workflow.
### Data
The backup should store files in separate folders.
The backup file structure should be based on the sha1 of the `devops-technical-test-data`.
## File structure example
For the following commits on the `devops-technical-test-data`:
| SHA | OPERATION |
|-----|-----------|
| Commit_N | create readme.md |
| Commit_N+1 | create doc.txt |
| Commit_N+2 | create data/test/test.txt |
| Commit_N+3 | append text to ./doc.txt |
| Commit_N+4 | create test/project/project1.txt |
The `candidate_backup_repository` should have
```bash
$ tree .
.
├── .gitworkflow
│   └── workflows
│   └── my-lovely-workflow.yml
├── data
│   ├── N
│   │   └── readme.md
│   ├── N+1
│   │   └── doc.txt
│   ├── N+2
│   │   └── data
│   │   └── test
│   │   └── test.txt
│   ├── N+3
│   │   └── doc.txt
│   └── N+4
│   └── test
│   └── project
│   └── project1.txt
└── script
└── my-beautiful-script.best-language
```

View File

@ -0,0 +1,84 @@
# Descartes Underwriting
## Context
We wish to create a backup tool that will save only the last modified files of a storage unit.
In our example, the storage unit is **not a bucket**.
The storage unit is the `DD-MM-YYYY-test` branch of the current `descartes-underwriting/devops-technical-test-data` git repository.
## Property
The `descartes-underwriting/devops-technical-test-data` repository is not frozen and will have new commits.
Commits will be added to the `DD-MM-YYYY-test` branch multiple times every day.
The `DD-MM-YYYY-test` branch name will be adapted using standard datetime convention eg: `01-01-2022-test` for the 1st of January 2022.
## Task
Develop a backup tool to save the modified files at each commit.
### Submission
Script and data should be saved on a private `candidate/descartes-backup-project` repository on your github account.
Access should be granted to all members of the `descartes-underwriting` group:
<https://github.com/orgs/descartes-underwriting/people>
### Script
Create a script to automate the backup process using open source software.
The script should track the changes fo the branch `DD-MM-YYYY-test` of the `descartes-underwriting/devops-technical-test-data` repository.
The execution of the script should be carried out with a github-action / gitlab-pipeline or any other tool automating git workflow on your git project.
It is highly recommended to use a scheduling tool to execute the back up process.
### Data
The backup should store files in separate folders.
The backup file structure should be based on the sha1 of the `descartes-underwriting/devops-technical-test-data`.
## File structure example
For the following commits on the `descartes-underwriting/devops-technical-test-data`:
| SHA | OPERATION |
|-----|-----------|
| Commit_N | create readme.md |
| Commit_N+1 | create doc.txt |
| Commit_N+2 | create data/test/test.txt |
| Commit_N+3 | append text to ./doc.txt |
| Commit_N+4 | create test/project/project1.txt |
The `candidate/descartes-backup-project` repository should have
```bash
$ tree .
.
├── .gitworkflow
│   └── workflows
│   └── my-lovely-workflow.yml
├── data
│   ├── N
│   │   └── readme.md
│   ├── N+1
│   │   └── doc.txt
│   ├── N+2
│   │   └── data
│   │   └── test
│   │   └── test.txt
│   ├── N+3
│   │   └── doc.txt
│   └── N+4
│   └── test
│   └── project
│   └── project1.txt
└── script
└── my-beautiful-script.best-language
```

View File

@ -0,0 +1 @@
This is a test file

View File

@ -0,0 +1,78 @@
# Descartes Underwriting
## Context
We wish to create a backup tool that will save only the last modified files of a storage unit.
In our example, the storage unit is **not a bucket**.
The storage unit is a git repository called `devops-technical-test-data`.
The repository `devops-technical-test-data` is not frozen and will have new commits.
Commits will be added to the `datestamp-test` branch on the `devops-technical-test-data` repository.
## Task
Develop a backup tool to save the modified files at each commit.
### Submission
Script and data should be saved on a private `descartes-backup-project` repository on your github account.
Access should be granted to all members of the `descartes-underwriting` group:
<https://github.com/orgs/descartes-underwriting/people>
### Script
Create a script to automate the backup process using open source software.
The script should track the branch `datestamp-test` of the repository.
The execution of the script should be carried with a github-action / gitlab-pipeline or any other git automated workflow.
### Data
The backup should store files in separate folders.
The backup file structure should be based on the sha1 of the `devops-technical-test-data`.
## File structure example
For the following commits on the `devops-technical-test-data`:
| SHA | OPERATION |
|-----|-----------|
| Commit_N | create readme.md |
| Commit_N+1 | create doc.txt |
| Commit_N+2 | create data/test/test.txt |
| Commit_N+3 | append text to ./doc.txt |
| Commit_N+4 | create test/project/project1.txt |
The `candidate_backup_repository` should have
```bash
$ tree .
.
├── .gitworkflow
│   └── workflows
│   └── my-lovely-workflow.yml
├── data
│   ├── N
│   │   └── readme.md
│   ├── N+1
│   │   └── doc.txt
│   ├── N+2
│   │   └── data
│   │   └── test
│   │   └── test.txt
│   ├── N+3
│   │   └── doc.txt
│   └── N+4
│   └── test
│   └── project
│   └── project1.txt
└── script
└── my-beautiful-script.best-language
```

View File

@ -0,0 +1 @@
This is a doc

View File

@ -0,0 +1,2 @@
This is a doc
Hello, world !

View File

@ -0,0 +1,89 @@
# Descartes Underwriting
## Context
We wish to create a backup tool that will save only the last modified files of a storage unit.
In our example, the storage unit is **not a bucket**.
The storage unit is the `DD-MM-YYYY-test` branch of the current `descartes-underwriting/devops-technical-test-data` git repository.
## Property
The `descartes-underwriting/devops-technical-test-data` repository is not frozen and will have new commits.
Commits will be added to the `DD-MM-YYYY-test` branch multiple times every day.
The `DD-MM-YYYY-test` branch name will be adapted using standard datetime convention eg: `01-01-2022-test` for the 1st of January 2022.
## Task
Develop a backup tool to save the modified files at each commit.
### Submission
Script and data should be saved on a private `candidate/descartes-backup-project` repository on your github account.
Access should be granted to all members of the `descartes-underwriting` group:
<https://github.com/orgs/descartes-underwriting/people>
Especially:
* <https://github.com/alexandreCameron>
* <https://github.com/Mareak>
### Script
Create a script to automate the backup process using open source software.
The script should track the changes fo the branch `DD-MM-YYYY-test` of the `descartes-underwriting/devops-technical-test-data` repository.
The execution of the script should be carried out with a github-action / gitlab-pipeline or any other tool automating git workflow on your git project.
It is highly recommended to use a scheduling tool to execute the back up process.
### Data
The backup should store files in separate folders.
The backup file structure should be based on the sha1 of the `descartes-underwriting/devops-technical-test-data`.
## File structure example
For the following commits on the `descartes-underwriting/devops-technical-test-data`:
| SHA | OPERATION |
|-----|-----------|
| Commit_N | create readme.md |
| Commit_N+1 | create doc.txt |
| Commit_N+2 | create data/test/test.txt |
| Commit_N+3 | append text to ./doc.txt |
| Commit_N+4 | create test/project/project1.txt |
The `candidate/descartes-backup-project` repository should have
```bash
$ tree .
.
├── .gitworkflow
│   └── workflows
│   └── my-lovely-workflow.yml
├── data
│   ├── N
│   │   └── readme.md
│   ├── N+1
│   │   └── doc.txt
│   ├── N+2
│   │   └── data
│   │   └── test
│   │   └── test.txt
│   ├── N+3
│   │   └── doc.txt
│   └── N+4
│   └── test
│   └── project
│   └── project1.txt
└── script
└── my-beautiful-script.best-language
```

View File

@ -0,0 +1,91 @@
# Descartes Underwriting
## Context
We wish to create a backup tool that will save only the last modified files of a storage unit.
In our example, the storage unit is **not a bucket**.
The storage unit is the `DD-MM-YYYY-test` branch of the current `descartes-underwriting/devops-technical-test-data` git repository.
## Property
The `descartes-underwriting/devops-technical-test-data` repository is not frozen and will have new commits.
Commits will be added to the `DD-MM-YYYY-test` branch multiple times every day.
The `DD-MM-YYYY-test` branch name will be adapted using standard datetime convention eg: `01-01-2022-test` for the 1st of January 2022.
## Task
Develop a backup tool to save the modified files at each commit.
### Submission
Script and data should be saved on a private `candidate/descartes-backup-project` repository on your github account.
Access should be granted to all members of the `descartes-underwriting` group:
<https://github.com/orgs/descartes-underwriting/people>
Especially:
* <https://github.com/alexandreCameron>
* <https://github.com/Mareak>
### Script
Create a script to automate the backup process using open source software.
The script should track the changes fo the branch `DD-MM-YYYY-test` of the `descartes-underwriting/devops-technical-test-data` repository.
The execution of the script should be carried out with a github-action / gitlab-pipeline or any other tool automating git workflow on your git project.
It is highly recommended to use a scheduling tool to execute the back up process.
### Data
The backup should store files in separate folders.
The backup file structure should be based on the sha1 of the `descartes-underwriting/devops-technical-test-data`.
Starting from the initial commit [282180fe7e5d9cbf297f2f0ef813cffe60ce2328](https://github.com/descartes-underwriting/devops-technical-test-data/commit/282180fe7e5d9cbf297f2f0ef813cffe60ce2328), all the history should be backup.
## File structure example
For the following commits on the `descartes-underwriting/devops-technical-test-data`:
| SHA | OPERATION |
|-----|-----------|
| Commit_N | create readme.md |
| Commit_N+1 | create doc.txt |
| Commit_N+2 | create data/test/test.txt |
| Commit_N+3 | append text to ./doc.txt |
| Commit_N+4 | create test/project/project1.txt |
The `candidate/descartes-backup-project` repository should have
```bash
$ tree .
.
├── .gitworkflow
│   └── workflows
│   └── my-lovely-workflow.yml
├── data
│   ├── N
│   │   └── readme.md
│   ├── N+1
│   │   └── doc.txt
│   ├── N+2
│   │   └── data
│   │   └── test
│   │   └── test.txt
│   ├── N+3
│   │   └── doc.txt
│   └── N+4
│   └── test
│   └── project
│   └── project1.txt
└── script
└── my-beautiful-script.best-language
```

View File

@ -0,0 +1,100 @@
# Descartes Underwriting
## Context
We wish to create a backup tool that will save only the last modified files of a storage unit.
In our example, the storage unit is **not a bucket**.
The storage unit is the `DD-MM-YYYY-test` branch of the current `descartes-underwriting/devops-technical-test-data` git repository.
## Property
The `descartes-underwriting/devops-technical-test-data` repository is not frozen and will have new commits.
Commits will be added to the `DD-MM-YYYY-test` branch multiple times every day.
The `DD-MM-YYYY-test` branch name will be adapted using standard datetime convention eg: `01-01-2022-test` for the 1st of January 2022.
## Task
Develop a backup tool to save the modified files at each commit.
### Submission
If something is not clear, you can ask questions to the recruiter.
When submitting your project, your version should **not be draft** but complete and following best practices.
The solution should be saved on a **private** `descartes-devops` repository on your github account.
The solution should include:
- source code
- test code
When the final version is ready:
1. Send an email to the recruiter indicating that you finished the project and sharing the url of the project
2. Grant access to:
- <https://github.com/alexandreCameron>
- <https://github.com/Mareak>
- <https://github.com/jrdescartes>
### Script
Create a script to automate the backup process using open source software.
The script should track the changes fo the branch `DD-MM-YYYY-test` of the `descartes-underwriting/devops-technical-test-data` repository.
The execution of the script should be carried out with a github-action / gitlab-pipeline or any other tool automating git workflow on your git project.
It is highly recommended to use a scheduling tool to execute the back up process.
### Data
The backup should store files in separate folders.
The backup file structure should be based on the sha1 of the `descartes-underwriting/devops-technical-test-data`.
Starting from the initial commit [282180fe7e5d9cbf297f2f0ef813cffe60ce2328](https://github.com/descartes-underwriting/devops-technical-test-data/commit/282180fe7e5d9cbf297f2f0ef813cffe60ce2328), all the history should be backup.
## File structure example
For the following commits on the `descartes-underwriting/devops-technical-test-data`:
| SHA | OPERATION |
|-----|-----------|
| Commit_N | create readme.md |
| Commit_N+1 | create doc.txt |
| Commit_N+2 | create data/test/test.txt |
| Commit_N+3 | append text to ./doc.txt |
| Commit_N+4 | create test/project/project1.txt |
The `candidate/descartes-backup-project` repository should have
```bash
$ tree .
.
├── .gitworkflow
│   └── workflows
│   └── my-lovely-workflow.yml
├── data
│   ├── N
│   │   └── readme.md
│   ├── N+1
│   │   └── doc.txt
│   ├── N+2
│   │   └── data
│   │   └── test
│   │   └── test.txt
│   ├── N+3
│   │   └── doc.txt
│   └── N+4
│   └── test
│   └── project
│   └── project1.txt
└── script
└── my-beautiful-script.best-language
```

View File

@ -0,0 +1 @@
This is project1

View File

@ -0,0 +1,92 @@
# Descartes Underwriting
## Context
We wish to create a backup tool that will save only the last modified files of a storage unit.
In our example, the storage unit is **not a bucket**.
The storage unit is the `DD-MM-YYYY-test` branch of the current `descartes-underwriting/devops-technical-test-data` git repository.
## Property
The `descartes-underwriting/devops-technical-test-data` repository is not frozen and will have new commits.
Commits will be added to the `DD-MM-YYYY-test` branch multiple times every day.
The `DD-MM-YYYY-test` branch name will be adapted using standard datetime convention eg: `01-01-2022-test` for the 1st of January 2022.
## Task
Develop a backup tool to save the modified files at each commit.
### Submission
Script and data should be saved on a private `candidate/descartes-backup-project` repository on your github account.
Access should be granted to all members of the `descartes-underwriting` group:
<https://github.com/orgs/descartes-underwriting/people>
Especially:
* <https://github.com/alexandreCameron>
* <https://github.com/Mareak>
* <https://github.com/jrdescartes>
### Script
Create a script to automate the backup process using open source software.
The script should track the changes fo the branch `DD-MM-YYYY-test` of the `descartes-underwriting/devops-technical-test-data` repository.
The execution of the script should be carried out with a github-action / gitlab-pipeline or any other tool automating git workflow on your git project.
It is highly recommended to use a scheduling tool to execute the back up process.
### Data
The backup should store files in separate folders.
The backup file structure should be based on the sha1 of the `descartes-underwriting/devops-technical-test-data`.
Starting from the initial commit [282180fe7e5d9cbf297f2f0ef813cffe60ce2328](https://github.com/descartes-underwriting/devops-technical-test-data/commit/282180fe7e5d9cbf297f2f0ef813cffe60ce2328), all the history should be backup.
## File structure example
For the following commits on the `descartes-underwriting/devops-technical-test-data`:
| SHA | OPERATION |
|-----|-----------|
| Commit_N | create readme.md |
| Commit_N+1 | create doc.txt |
| Commit_N+2 | create data/test/test.txt |
| Commit_N+3 | append text to ./doc.txt |
| Commit_N+4 | create test/project/project1.txt |
The `candidate/descartes-backup-project` repository should have
```bash
$ tree .
.
├── .gitworkflow
│   └── workflows
│   └── my-lovely-workflow.yml
├── data
│   ├── N
│   │   └── readme.md
│   ├── N+1
│   │   └── doc.txt
│   ├── N+2
│   │   └── data
│   │   └── test
│   │   └── test.txt
│   ├── N+3
│   │   └── doc.txt
│   └── N+4
│   └── test
│   └── project
│   └── project1.txt
└── script
└── my-beautiful-script.best-language
```

View File

@ -0,0 +1,78 @@
# Descartes Underwriting
## Context
We wish to create a backup tool that will save only the last modified files of a storage unit.
In our example, the storage unit is **not a bucket**.
The storage unit is a git repository called `devops-technical-test-data`.
The repository `devops-technical-test-data` is not frozen and will have new commits.
Commits will be added to the `datestamp-test` branch on the `devops-technical-test-data` repository.
## Task
Develop a backup tool to save the modified files at each commit.
### Submission
Script and data should be saved on a private `descartes-backup-project` repository on your github account.
Access should be granted to all members of the `descartes-underwriting` group:
<https://github.com/orgs/descartes-underwriting/people>
### Script
Create a script to automate the backup process using open source software.
The script should track the branch `datestamp-test` of the repository.
The execution of the script should be carried with a github-action / gitlab-pipeline or any other git automated workflow.
### Data
The backup should store files in separate folders.
The backup file structure should be based on the sha1 of the `devops-technical-test-data`.
## File structure example
For the following commits on the `devops-technical-test-data`:
| SHA | OPERATION |
|-----|-----------|
| Commit_N | create readme.md |
| Commit_N+1 | create doc.txt |
| Commit_N+2 | create data/test/test.txt |
| Commit_N+3 | append text to ./doc.txt |
| Commit_N+4 | create test/project/project1.txt |
The `candidate_backup_repository` should have
```bash
$ tree .
.
├── .gitworkflow
│   └── workflows
│   └── my-lovely-workflow.yml
├── data
│   ├── N
│   │   └── readme.md
│   ├── N+1
│   │   └── doc.txt
│   ├── N+2
│   │   └── data
│   │   └── test
│   │   └── test.txt
│   ├── N+3
│   │   └── doc.txt
│   └── N+4
│   └── test
│   └── project
│   └── project1.txt
└── script
└── my-beautiful-script.best-language
```

View File

@ -0,0 +1 @@
This is a doc