Skip to content

Commit 2c47b61

Browse files
committed
Use more reliable methods for creating and modifying Dockerfiles
1 parent dda08a4 commit 2c47b61

File tree

1 file changed

+115
-102
lines changed

1 file changed

+115
-102
lines changed

.github/workflows/biogears-complete-pipeline.yml

Lines changed: 115 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,12 @@ jobs:
3333
find . -name "Dockerfile" | sort
3434
echo "Docker directory contents (if exists):"
3535
[ -d "docker" ] && ls -la docker/ || echo "No docker directory found"
36-
echo "Checking subdirectories for Docker files:"
37-
for dir in */; do
38-
echo "Contents of $dir:"
39-
ls -la "$dir" || echo "Failed to list $dir"
40-
if [ -d "$dir/docker" ]; then
41-
echo "Docker directory in $dir:"
42-
ls -la "$dir/docker"
43-
fi
44-
done
36+
echo "GitHub runner OS information:"
37+
uname -a
38+
39+
# Try to determine sed version/type for debugging
40+
echo "Sed version info:"
41+
sed --version || echo "sed --version not supported"
4542
4643
- name: Set up Docker Buildx
4744
uses: docker/setup-buildx-action@v2
@@ -59,124 +56,126 @@ jobs:
5956
# Enhanced debugging for Docker files
6057
echo "Looking for Dockerfiles..."
6158
echo "All Dockerfiles in repository:"
62-
find . -name "Dockerfile" -type f | tee all_dockerfiles.txt
59+
find . -name "Dockerfile" -type f | tee all_dockerfiles.txt || echo "No Dockerfiles found"
6360
6461
# Count Dockerfiles
65-
DOCKERFILE_COUNT=$(wc -l < all_dockerfiles.txt || echo "0")
62+
DOCKERFILE_COUNT=$(grep -c "" all_dockerfiles.txt 2>/dev/null || echo "0")
6663
echo "Found $DOCKERFILE_COUNT Dockerfiles in repository"
6764
68-
if [ "$DOCKERFILE_COUNT" -eq "0" ]; then
65+
if [ "$DOCKERFILE_COUNT" = "0" ]; then
6966
echo "No Dockerfiles found in repository, creating minimal ones"
7067
7168
# Create directory for external dependencies Dockerfile
7269
mkdir -p docker/external
7370
74-
# Create a minimal external dependencies Dockerfile
75-
cat > docker/external/Dockerfile << 'EOF'
76-
FROM ubuntu:20.04
77-
78-
# Install basic dependencies
79-
RUN apt-get update && \
80-
apt-get install -y \
81-
build-essential \
82-
cmake \
83-
git \
84-
wget \
85-
libxml2-dev \
86-
libxerces-c-dev \
87-
liblog4cpp5-dev \
88-
libeigen3-dev \
89-
&& rm -rf /var/lib/apt/lists/*
90-
91-
# Install CodeSynthesis XSD
92-
RUN wget https://www.codesynthesis.com/download/xsd/4.0/linux-gnu/x86_64/xsd_4.0.0-1_amd64.deb && \
93-
dpkg -i xsd_4.0.0-1_amd64.deb && \
94-
rm xsd_4.0.0-1_amd64.deb
95-
96-
ENV PATH="/usr/local/bin:${PATH}"
97-
WORKDIR /opt/biogears
98-
99-
CMD ["/bin/bash"]
100-
EOF
71+
# Create a minimal external dependencies Dockerfile - simpler approach
72+
echo 'FROM ubuntu:20.04' > docker/external/Dockerfile
73+
echo '' >> docker/external/Dockerfile
74+
echo '# Install basic dependencies' >> docker/external/Dockerfile
75+
echo 'RUN apt-get update && \\' >> docker/external/Dockerfile
76+
echo ' apt-get install -y \\' >> docker/external/Dockerfile
77+
echo ' build-essential \\' >> docker/external/Dockerfile
78+
echo ' cmake \\' >> docker/external/Dockerfile
79+
echo ' git \\' >> docker/external/Dockerfile
80+
echo ' wget \\' >> docker/external/Dockerfile
81+
echo ' libxml2-dev \\' >> docker/external/Dockerfile
82+
echo ' libxerces-c-dev \\' >> docker/external/Dockerfile
83+
echo ' liblog4cpp5-dev \\' >> docker/external/Dockerfile
84+
echo ' libeigen3-dev && \\' >> docker/external/Dockerfile
85+
echo ' rm -rf /var/lib/apt/lists/*' >> docker/external/Dockerfile
86+
echo '' >> docker/external/Dockerfile
87+
echo '# Install CodeSynthesis XSD' >> docker/external/Dockerfile
88+
echo 'RUN wget https://www.codesynthesis.com/download/xsd/4.0/linux-gnu/x86_64/xsd_4.0.0-1_amd64.deb && \\' >> docker/external/Dockerfile
89+
echo ' dpkg -i xsd_4.0.0-1_amd64.deb && \\' >> docker/external/Dockerfile
90+
echo ' rm xsd_4.0.0-1_amd64.deb' >> docker/external/Dockerfile
91+
echo '' >> docker/external/Dockerfile
92+
echo 'ENV PATH="/usr/local/bin:${PATH}"' >> docker/external/Dockerfile
93+
echo 'WORKDIR /opt/biogears' >> docker/external/Dockerfile
94+
echo '' >> docker/external/Dockerfile
95+
echo 'CMD ["/bin/bash"]' >> docker/external/Dockerfile
10196
10297
# Create directory for builder Dockerfile
10398
mkdir -p docker/builder
10499
105-
# Create a minimal builder Dockerfile
106-
cat > docker/builder/Dockerfile << 'EOF'
107-
ARG EXTERNAL_IMAGE=ghcr.io/hari-ara/biogears-hari-external:latest
108-
FROM ${EXTERNAL_IMAGE}
109-
110-
# Copy source code
111-
COPY . /opt/biogears/core
112-
113-
# Build BioGears
114-
WORKDIR /opt/biogears/core
115-
RUN mkdir -p build && \
116-
cd build && \
117-
cmake .. -DCMAKE_BUILD_TYPE=Release && \
118-
cmake --build . --parallel $(nproc) && \
119-
cd ..
120-
121-
# Copy built libraries and binaries to standard locations
122-
RUN mkdir -p /usr/local/lib /usr/local/bin && \
123-
cp -r build/lib/* /usr/local/lib/ && \
124-
cp -r build/bin/* /usr/local/bin/
125-
126-
WORKDIR /opt/biogears
127-
CMD ["/bin/bash"]
128-
EOF
100+
# Create a minimal builder Dockerfile - simpler approach
101+
echo 'FROM ghcr.io/hari-ara/biogears-hari-external:latest' > docker/builder/Dockerfile
102+
echo '' >> docker/builder/Dockerfile
103+
echo '# Copy source code' >> docker/builder/Dockerfile
104+
echo 'COPY . /opt/biogears/core' >> docker/builder/Dockerfile
105+
echo '' >> docker/builder/Dockerfile
106+
echo '# Build BioGears' >> docker/builder/Dockerfile
107+
echo 'WORKDIR /opt/biogears/core' >> docker/builder/Dockerfile
108+
echo 'RUN mkdir -p build && \\' >> docker/builder/Dockerfile
109+
echo ' cd build && \\' >> docker/builder/Dockerfile
110+
echo ' cmake .. -DCMAKE_BUILD_TYPE=Release && \\' >> docker/builder/Dockerfile
111+
echo ' cmake --build . --parallel $(nproc) && \\' >> docker/builder/Dockerfile
112+
echo ' cd ..' >> docker/builder/Dockerfile
113+
echo '' >> docker/builder/Dockerfile
114+
echo '# Copy built libraries and binaries to standard locations' >> docker/builder/Dockerfile
115+
echo 'RUN mkdir -p /usr/local/lib /usr/local/bin && \\' >> docker/builder/Dockerfile
116+
echo ' find build -name "*.so*" -exec cp -v {} /usr/local/lib/ \\; && \\' >> docker/builder/Dockerfile
117+
echo ' find build -name "*.a" -exec cp -v {} /usr/local/lib/ \\; && \\' >> docker/builder/Dockerfile
118+
echo ' find build -type f -executable -not -path "*/CMakeFiles/*" -exec cp -v {} /usr/local/bin/ \\; || true' >> docker/builder/Dockerfile
119+
echo '' >> docker/builder/Dockerfile
120+
echo 'WORKDIR /opt/biogears' >> docker/builder/Dockerfile
121+
echo 'CMD ["/bin/bash"]' >> docker/builder/Dockerfile
129122
130123
echo "Created Dockerfiles:"
131124
find docker -name "Dockerfile" -type f | tee all_dockerfiles.txt
125+
126+
echo "External Dockerfile contents:"
127+
cat docker/external/Dockerfile
128+
129+
echo "Builder Dockerfile contents:"
130+
cat docker/builder/Dockerfile
132131
else
133-
# Fix any problematic Dockerfiles in the repository
134-
echo "Checking Dockerfiles for issues..."
135-
for dockerfile in $(cat all_dockerfiles.txt); do
136-
echo "Checking $dockerfile"
137-
138-
# Fix common issues like invalid FROM lines
139-
if grep -q "^FROM biogears-external" "$dockerfile"; then
140-
echo "Found problematic FROM line in $dockerfile, fixing it"
141-
# Create backup
142-
cp "$dockerfile" "${dockerfile}.bak"
143-
# Replace with correct image reference
144-
sed -i "s|^FROM biogears-external|FROM ghcr.io/${{ github.repository_owner }}/biogears-hari-external:latest|g" "$dockerfile"
145-
echo "Fixed $dockerfile:"
146-
grep "^FROM" "$dockerfile"
147-
fi
148-
149-
# Check for variations with whitespace or versions
150-
if grep -q "^FROM[[:space:]]*biogears-external:" "$dockerfile"; then
151-
echo "Found problematic versioned FROM line in $dockerfile, fixing it"
152-
cp "$dockerfile" "${dockerfile}.bak2"
153-
sed -i "s|^FROM[[:space:]]*biogears-external:|FROM ghcr.io/${{ github.repository_owner }}/biogears-hari-external:|g" "$dockerfile"
154-
echo "Fixed $dockerfile:"
155-
grep "^FROM" "$dockerfile"
156-
fi
157-
158-
# Also fix any FROM lines referencing biogears-builder
159-
if grep -q "^FROM biogears-builder" "$dockerfile"; then
160-
echo "Found problematic builder FROM line in $dockerfile, fixing it"
161-
# Create backup
132+
# Fix any problematic Dockerfiles in the repository
133+
echo "Checking Dockerfiles for issues..."
134+
for dockerfile in $(cat all_dockerfiles.txt); do
135+
echo "Checking $dockerfile"
136+
137+
# Create a temporary file for transformations
138+
TEMP_FILE="${dockerfile}.tmp"
139+
140+
# Fix common issues like invalid FROM lines using pattern replacement
141+
# without relying on sed -i which has different syntax across platforms
142+
cat "$dockerfile" | while IFS= read -r line; do
143+
if [[ "$line" =~ ^FROM[[:space:]]*biogears-external ]]; then
144+
echo "Found and fixing: $line"
145+
echo "FROM ghcr.io/${{ github.repository_owner }}/biogears-hari-external:latest" >> "$TEMP_FILE"
146+
elif [[ "$line" =~ ^FROM[[:space:]]*biogears-external: ]]; then
147+
echo "Found and fixing versioned: $line"
148+
version=$(echo "$line" | sed 's/^FROM[[:space:]]*biogears-external://g')
149+
echo "FROM ghcr.io/${{ github.repository_owner }}/biogears-hari-external:$version" >> "$TEMP_FILE"
150+
elif [[ "$line" =~ ^FROM[[:space:]]*biogears-builder ]]; then
151+
echo "Found and fixing builder: $line"
152+
echo "FROM ghcr.io/${{ github.repository_owner }}/biogears-hari-builder:latest" >> "$TEMP_FILE"
153+
else
154+
echo "$line" >> "$TEMP_FILE"
155+
fi
156+
done
157+
158+
# Backup the original file and move the corrected version into place
162159
cp "$dockerfile" "${dockerfile}.bak"
163-
# Replace with correct image reference
164-
sed -i "s|^FROM biogears-builder|FROM ghcr.io/${{ github.repository_owner }}/biogears-hari-builder:latest|g" "$dockerfile"
165-
echo "Fixed $dockerfile:"
166-
grep "^FROM" "$dockerfile"
167-
fi
168-
done
160+
cat "$TEMP_FILE" > "$dockerfile"
161+
rm "$TEMP_FILE"
162+
163+
echo "Modified file contents:"
164+
cat "$dockerfile"
165+
done
169166
fi
170167
171168
# Pick the first Dockerfile for external dependencies
172-
EXTERNAL_DOCKERFILE=$(grep -i "external" all_dockerfiles.txt | head -n 1)
169+
EXTERNAL_DOCKERFILE=$(grep -i "external" all_dockerfiles.txt 2>/dev/null | head -n 1)
173170
174171
if [ -z "$EXTERNAL_DOCKERFILE" ]; then
175172
echo "No external Dockerfile found, using the first one"
176-
EXTERNAL_DOCKERFILE=$(head -n 1 all_dockerfiles.txt)
173+
EXTERNAL_DOCKERFILE=$(head -n 1 all_dockerfiles.txt 2>/dev/null)
177174
178175
if [ -z "$EXTERNAL_DOCKERFILE" ]; then
179-
echo "ERROR: No Dockerfiles found in repository"
176+
echo "ERROR: Failed to find Dockerfiles even after creating them"
177+
echo "Current directory contents:"
178+
find . -type f -name "Dockerfile" -o -name "dockerfile"
180179
exit 1
181180
fi
182181
fi
@@ -239,7 +238,21 @@ jobs:
239238
# If FROM doesn't use the ARG, make sure it's properly referenced
240239
if grep -q "^FROM biogears-external" "$BUILDER_DOCKERFILE"; then
241240
echo "Fixing FROM line in $BUILDER_DOCKERFILE"
242-
sed -i "s|^FROM biogears-external|FROM ghcr.io/${{ github.repository_owner }}/biogears-hari-external:latest|g" "$BUILDER_DOCKERFILE"
241+
242+
# Create a temporary file for the modified content
243+
TEMP_FILE="${BUILDER_DOCKERFILE}.tmp"
244+
cat "$BUILDER_DOCKERFILE" | while IFS= read -r line; do
245+
if [[ "$line" =~ ^FROM[[:space:]]*biogears-external ]]; then
246+
echo "FROM ghcr.io/${{ github.repository_owner }}/biogears-hari-external:latest" >> "$TEMP_FILE"
247+
else
248+
echo "$line" >> "$TEMP_FILE"
249+
fi
250+
done
251+
252+
# Replace the original with the modified version
253+
cp "$BUILDER_DOCKERFILE" "${BUILDER_DOCKERFILE}.bak2"
254+
cp "$TEMP_FILE" "$BUILDER_DOCKERFILE"
255+
rm "$TEMP_FILE"
243256
fi
244257
fi
245258

0 commit comments

Comments
 (0)