# syntax=docker/dockerfile:experimental FROM fedora:39 RUN dnf update -y && dnf install -y \ curl \ git \ git-lfs \ htop \ vim \ nano \ tar \ bzip2 \ unzip \ python3-pip \ && rm -rf /var/cache/dnf \ && git lfs install \ && curl -fsSL https://code-server.dev/install.sh | sh RUN curl -sSL https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm -o /tmp/ms-prod.rpm \ && rpm -i /tmp/ms-prod.rpm \ && rm -f /tmp/ms-prod.rpm \ && dnf install powershell -y \ && rm -rf /var/cache/dnf RUN useradd -u 1000 coder COPY code-server.tar.gz /tmp COPY settings.json /tmp COPY config.yaml /tmp COPY project-creator.py /tmp COPY entrypoint.sh /usr/bin ARG WPILIB_DL_URL ARG WPILIB_FILE_NAME=wpilib.tar.gz RUN chmod 755 /usr/bin/entrypoint.sh \ && curl -fsSL ${WPILIB_DL_URL} -o /tmp/${WPILIB_FILE_NAME} \ && tar -xzf "/tmp/${WPILIB_FILE_NAME}" -C /tmp \ && WPILIB_ARTIFACTS="$(find /tmp -type f -name 'WPILib_Linux-*-artifacts.tar.gz' -print)" \ && ARTIFACTSYEAR="$(echo $WPILIB_ARTIFACTS | cut -d '-' -f 2 | cut -d '.' -f 1)" \ && mkdir -p /home/coder/wpilib/$ARTIFACTSYEAR \ && tar -xzf "$WPILIB_ARTIFACTS" -C /home/coder/wpilib/$ARTIFACTSYEAR \ && chown -R coder:coder /home/coder/wpilib \ && rm -f /tmp/${WPILIB_FILE_NAME} \ && rm -rf "$(find /tmp -type d -name 'WPILib_Linux-*' -print)" \ && GRADLEZIP="$(ls /home/coder/wpilib/$ARTIFACTSYEAR/installUtils | grep 'gradle-.*-bin.zip')" \ && GRADLEFOLDER="/home/coder/gradle-$(echo \"$GRADLEZIP\" | cut -d '-' -f 2)" \ && unzip /home/coder/wpilib/$ARTIFACTSYEAR/installUtils/$GRADLEZIP -d /home/coder/ \ && chown -R coder:coder $GRADLEFOLDER \ && mkdir -p /home/coder/.config/powershell \ && chown -R coder:coder /home/coder/.config \ && echo "\$JAVA_HOME=/home/coder/wpilib/$ARTIFACTSYEAR/jdk" >> "/home/coder/.config/powershell/Microsoft.PowerShell_profile.ps1" \ && echo "\$env:PATH+=:/home/coder/wpilib/$ARTIFACTSYEAR/jdk/bin" >> "/home/coder/.config/powershell/Microsoft.PowerShell_profile.ps1" \ && echo "\$env:PATH+=:$GRADLEFOLDER/bin" >> "/home/coder/.config/powershell/Microsoft.PowerShell_profile.ps1" \ && su -c "/home/coder/wpilib/$ARTIFACTSYEAR/jdk/bin/java -jar /home/coder/wpilib/$ARTIFACTSYEAR/maven/MavenMetaDataFixer.jar" "coder" \ && rm -rf /home/coder/wpilib/$ARTIFACTSYEAR/advantagescope \ && rm -f /home/coder/wpilib/$ARTIFACTSYEAR/installUtils/$GRADLEZIP \ && rm -rf /home/coder/wpilib/$ARTIFACTSYEAR/tools \ && rm -rf /home/coder/wpilib/$ARTIFACTSYEAR/documentation \ && rm -rf /root/.cache \ && su -c "mkdir -p /home/coder/.local/share" "coder" \ && su -c "mkdir -p /home/coder/.config/code-server" "coder" \ && su -c "tar -xzf /tmp/code-server.tar.gz -C /home/coder/.local/share" "coder" \ && su -c "cp -f /tmp/settings.json /home/coder/.local/share/code-server/User" "coder" \ && su -c "sed -i 's/###YEAR###/$ARTIFACTSYEAR/g;' /home/coder/.local/share/code-server/User/settings.json" "coder" \ && su -c "cp -f /tmp/config.yaml /home/coder/.config/code-server" "coder" \ && su -c "cp -f /tmp/project-creator.py /home/coder" "coder" \ && for EXTENSION in /home/coder/wpilib/$ARTIFACTSYEAR/vsCodeExtensions/*.vsix; do su -c "code-server --install-extension $EXTENSION" "coder"; done RUN usermod -s /usr/bin/pwsh coder EXPOSE 8080 USER coder ENV USER=coder WORKDIR /home/coder ENTRYPOINT ["/usr/bin/entrypoint.sh", "coder"]