Skip to content

Commit

Permalink
Git Init Operation #69
Browse files Browse the repository at this point in the history
  • Loading branch information
jfaltermeier committed May 5, 2023
1 parent ab961ea commit bf054b8
Show file tree
Hide file tree
Showing 6 changed files with 136 additions and 2 deletions.
5 changes: 3 additions & 2 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"recommendations": [
"hashicorp.terraform"
"hashicorp.terraform",
"ms-python.python"
]
}
}
7 changes: 7 additions & 0 deletions doc/docs/Building-Internal.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,10 @@ Build and push the operator with:
docker build -t theiacloud/theia-cloud-operator:latest -f dockerfiles/operator/Dockerfile .
docker push theiacloud/theia-cloud-operator:latest
```

Build and pish the git-init container:

```bash
docker build -t theiacloud/theia-cloud-git-init:latest -f dockerfiles/git-init/Dockerfile .
docker push theiacloud/theia-cloud-git-init:latest
```
16 changes: 16 additions & 0 deletions dockerfiles/git-init/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
FROM debian:11-slim

RUN apt update && \
apt install python git -y && \
apt clean

WORKDIR /tmp
COPY python/git-init/git-init.py .
COPY python/git-init/git-askpw.py .

ENV GIT_PROMPT1 "foo"
ENV GIT_PROMPT2 "bar"
ENV GIT_ASKPASS=/tmp/git-askpw.py

ENTRYPOINT [ "python", "git-init.py" ]
CMD ["-h"]
44 changes: 44 additions & 0 deletions python/git-init/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Git Init Container

## Scenarios

- HTTP(S)
- No Auth
- Ask for password only
- Ask for username and password
- SSH
- No Auth
- Ask for password

## Testing

Build init container

```bash
docker build -t theiacloud/theia-cloud-git-init:local -f dockerfiles/git-init/Dockerfile .
```

Test Checkout

```bash
# Adjust URLs and Password/PATs below
# keep spaces in front to avoid command being added to bash history
export HTTP_PUBLIC=https://github.com/eclipsesource/theia-cloud.git
export HTTP_PRIVATE=https://gitlab.eclipse.org/username/my.repository.git
export HTTP_PRIVATE_WITH_USERNAME=https://[email protected]/username/my.repository.git
export HTTP_PRIVATE_WITH_USERNAME_AND_PASSWORD=https://username:[email protected]/username/my.repository.git
export HTTP_USERNAME=username
export HTTP_PASSWORD=pat

# HTTPS Public
docker run --rm theiacloud/theia-cloud-git-init:local "$HTTP_PUBLIC" "/tmp/my-repo"

# HTTPS Private
docker run --env GIT_PROMPT1=$HTTP_USERNAME --env GIT_PROMPT2=$HTTP_PASSWORD --rm theiacloud/theia-cloud-git-init:local "$HTTP_PRIVATE" "/tmp/my-repo"

# HTTPS Private with Username
docker run --env GIT_PROMPT1=$HTTP_PASSWORD --rm theiacloud/theia-cloud-git-init:local "$HTTP_PRIVATE_WITH_USERNAME" "/tmp/my-repo"

# HTTPS Private with Username and Password
docker run --rm theiacloud/theia-cloud-git-init:local "$HTTP_PRIVATE_WITH_USERNAME_AND_PASSWORD" "/tmp/my-repo"
```
24 changes: 24 additions & 0 deletions python/git-init/git-askpw.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/usr/bin/env python
import os
import logging

debugLogging = False
path = "/tmp/theia-cloud-askpw"

logging.basicConfig()

logger = logging.getLogger('ask-pw')
if debugLogging:
logger.setLevel(logging.DEBUG)
else:
logger.setLevel(logging.INFO)

if os.path.isfile(path):
logger.debug("Prompt 2")
prompt2 = os.environ['GIT_PROMPT2']
print(prompt2)
else:
logger.debug("Prompt 1")
prompt1 = os.environ['GIT_PROMPT1']
print(prompt1)
os.mknod(path)
42 changes: 42 additions & 0 deletions python/git-init/git-init.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/usr/bin/env python

import argparse
import subprocess
import logging

debugLogging = True

logging.basicConfig()

logger = logging.getLogger('git-init')
if debugLogging:
logger.setLevel(logging.DEBUG)
else:
logger.setLevel(logging.INFO)

def runProcess(args):
process = subprocess.Popen(
args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
out = stdout.decode('ascii')
if len(out) > 0:
logger.info(out)
if process.returncode != 0:
logger.error(stderr.decode('ascii'))
return process.returncode

parser = argparse.ArgumentParser()
parser.add_argument("repository", help="The repository URL", type=str)
parser.add_argument("directory", help="The directory to clone into", type=str)
args = parser.parse_args()

code = runProcess(["git", "config", "--global", "credential.helper", "store"])
if code != 0:
exit(code)

code = runProcess(["git", "clone", args.repository, args.directory])
if code != 0:
exit(code)

if debugLogging:
runProcess(["ls", "-al", args.directory])

0 comments on commit bf054b8

Please sign in to comment.