@@ -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