-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTaskfile.yaml
150 lines (133 loc) · 5.43 KB
/
Taskfile.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
---
version: 3
vars:
PROJECT:
sh: echo ${PROJECT}
BRANCH:
sh: if [ $(git rev-parse --abbrev-ref HEAD) != "main" ]; then echo $(git rev-parse --abbrev-ref HEAD); else echo main ; fi
DAGGER_ANSIBLE_MODULE: github.com/stuttgart-things/dagger/ansible
DAGGER_ANSIBLE_MODULE_VERSION: v0.1.2
# PRECONDITION TO CHECK IF THE VIRTUAL ENVIRONMENT IS ACTIVATED
venv-precondition: &venv
- sh: |
pip -V | grep '.venv' >/dev/null 2>&1
msg: "The pip version output does not contain .venv, Halting. Run task setup-molecule and/or source ansible/.venv/bin/activate"
tasks:
create-release:
desc: Create release on github w/ artifact
cmds:
- gh release create {{ .COLLECTION }}-{{ .VERSION }} --notes "released artifact for {{ .COLLECTION }}" {{ .PACKAGE }}
vars:
VERSION:
sh: echo {{ .PACKAGE }} | awk -F'-' '{print $NF}' | awk -F'.tar.gz' '{print $1}'
COLLECTION:
sh: echo "{{ .PACKAGE }}" | grep -oE '[^/]+-[0-9]+\.[0-9]+\.[0-9]+' | sed 's/-[0-9]\+\.[0-9]\+\.[0-9]\+$//'
# PACKAGE=/tmp/ansible/collections/artifacts/sthings-baseos-25.4.1100.tar.gz task create-release
build-collection:
desc: Build ansible collection
cmds:
- |
echo "CHOOSE TO BE BUILD COLLECTION:"
COLLECTION=$(gum choose {{ .ALL_COLLECTIONS }})
rm -rf {{ .WIP_DIR }}/*
dagger call -m {{ .DAGGER_ANSIBLE_MODULE }}@{{ .DAGGER_ANSIBLE_MODULE_VERSION }} init-collection --src {{ .SOURCE_COLLECTION_PATH }}/${COLLECTION} --progress plain export --path={{ .WIP_DIR }}
echo "INITIALIZED COLLECTION DIR IN: {{ .WIP_DIR }}/{{ .NAMESPACE }}/${COLLECTION}" && ls -lta {{ .WIP_DIR }}/{{ .NAMESPACE }}/${COLLECTION}
rm -rf {{ .BUILD_DIR }}/*
dagger call -m {{ .DAGGER_ANSIBLE_MODULE }}@{{ .DAGGER_ANSIBLE_MODULE_VERSION }} modify-role-includes --src {{ .WIP_DIR }}/{{ .NAMESPACE }}/${COLLECTION} --progress plain export --path {{ .BUILD_DIR }}
echo "MODIFIED COLLECTION IN: {{ .BUILD_DIR }}" && ls -lta {{ .BUILD_DIR }}
rm -rf {{ .OUTPUT_DIR }}/*
dagger call -m {{ .DAGGER_ANSIBLE_MODULE }}@{{ .DAGGER_ANSIBLE_MODULE_VERSION }} build --src {{ .BUILD_DIR }} --progress plain export --path {{ .OUTPUT_DIR }}
ARTIFACT_PATH=$(ls {{ .OUTPUT_DIR }}/*tar.gz)
RELEASE_TAG=$(basename "${ARTIFACT_PATH}" .tar.gz)
echo package ${ARTIFACT_PATH} --tag ${RELEASE_TAG}
ansible-galaxy collection install $(ls {{ .OUTPUT_DIR }}/*tar.gz)
dagger call --progress plain -m github.com/sagikazarmark/daggerverse/gh@main \
release create --repo {{ .GH_REPO }} \
--token=env:GITHUB_TOKEN \
--files ${ARTIFACT_PATH} \
--notes "release ${RELEASE_TAG}" \
--tag ${RELEASE_TAG} \
--title ${RELEASE_TAG}
vars:
NAMESPACE: sthings
SOURCE_COLLECTION_PATH: ./collections
COLLECTION_BUILD_DIR: /home/sthings/projects/ansible/ansible/collections
COLLECTION_TMP_DIR: /tmp/ansible/collections
WIP_DIR: "{{ .COLLECTION_TMP_DIR }}/wip"
BUILD_DIR: "{{ .COLLECTION_TMP_DIR }}/build/"
OUTPUT_DIR: "{{ .COLLECTION_TMP_DIR }}/artifacts/"
ALL_COLLECTIONS:
sh: ls {{ .SOURCE_COLLECTION_PATH }} | xargs -n1 printf '"%s" '
GH_REPO: stuttgart-things/ansible
branch:
desc: Create branch from main
cmds:
- git checkout main
- git branch
- git pull
- |
echo "Enter to be created (remote) branch:"
read BRANCH_NAME;
git checkout -b ${BRANCH_NAME}
git push origin ${BRANCH_NAME}
- git branch
- git branch --set-upstream-to=origin/main ${BRANCH_NAME}
check:
desc: "Run pre-commit hooks"
cmds:
- pre-commit run -a
run-molecule:
preconditions: *venv
cmds:
- |
COLLECTION_NAME=$(gum choose "baseos" "container")
molecule test -s ${COLLECTION_NAME}
setup-molecule:
preconditions: *venv
cmds:
- pip install -U setuptools pip 'molecule'
- pip install molecule-docker
- pip install netaddr
- molecule --version
- ansible-galaxy collection install community.docker
setup-venv:
desc: "Setup python virtual environment"
cmds:
- rm -rf ./.venv
- python3 -m venv ./.venv
- echo "DON'T FORGET TO RUN - source .venv/bin/activate"
commit:
desc: Commit + push code into branch
deps:
- check
cmds:
- rm -rf dist/
- git branch --set-upstream-to=origin/{{ .BRANCH }}
- git pull
- |
git add *
if [[ -n $(git status --porcelain) ]]; then
echo "ENTER COMMIT MESSAGE"
read COMMIT_MESSAGE;
echo "COMMITTING CHANGES"
git commit --allow-empty -a -m "$(echo ${COMMIT_MESSAGE})"
else
echo "NO CHANGES"
fi
git push origin -u {{ .BRANCH }}
pr:
desc: Create pull request into main
cmds:
- task: commit
- |
if gh pr list | grep -q "{{.BRANCH}}"; then
echo "⚠️ PR already exists for branch {{.BRANCH}}, closing it..."
gh pr close {{.BRANCH}}
else
echo "✅ No existing PR found for branch {{.BRANCH}}."
fi
- gh pr create -t "{{ .BRANCH }}" -b "{{ .BRANCH }} branch into main"
- sleep 20s
- gh pr checks $(gh pr list | grep "^[^#;]" | grep '{{ .BRANCH }}' | awk '{print $1}') --watch
- gh pr merge $(gh pr list | grep "^[^#;]" | grep '{{ .BRANCH }}' | awk '{print $1}') --auto --rebase --delete-branch
- git checkout main && git pull