tinygo-org / drivers

TinyGo drivers for sensors, displays, wireless adaptors, and other devices that use I2C, SPI, GPIO, ADC, and UART interfaces.
https://tinygo.org
BSD 3-Clause "New" or "Revised" License
584 stars 180 forks source link

build: free space before build and use latest checkout action #653

Closed deadprogram closed 4 months ago

deadprogram commented 4 months ago

This PR modifies the build to free space on the runner drive before build. It also updates to use the latest GH checkout action.

aykevl commented 4 months ago

My guess would be that those extra directories are not actually part of the filesystem, or are read-only or something. Because removing them didn't seem to do much.

I can think of two possible fixes:

aykevl commented 4 months ago

Built the Docker image myself and it is indeed quite large:

~$ docker history sha256:41c93750c3beea6f31895f69e6a9f849decd16b3d6547c89f4da2fecccd4e3fa
IMAGE          CREATED              CREATED BY                                      SIZE      COMMENT
41c93750c3be   About a minute ago   CMD ["tinygo"]                                  0B        buildkit.dockerfile.v0
<missing>      About a minute ago   RUN /bin/sh -c cd /tinygo/ &&     make wasi-…   1.02GB    buildkit.dockerfile.v0
<missing>      3 minutes ago        RUN /bin/sh -c cd /tinygo/ &&     make # bui…   280MB     buildkit.dockerfile.v0
<missing>      4 minutes ago        RUN /bin/sh -c cd /tinygo/ &&     rm -rf ./l…   6.79GB    buildkit.dockerfile.v0
<missing>      4 minutes ago        COPY . /tinygo # buildkit                       8.15GB    buildkit.dockerfile.v0
<missing>      4 minutes ago        RUN /bin/sh -c cd /tinygo/ &&     make llvm-…   1.11GB    buildkit.dockerfile.v0
<missing>      18 minutes ago       RUN /bin/sh -c cd /tinygo/ &&     make llvm-…   1.72GB    buildkit.dockerfile.v0
<missing>      18 minutes ago       COPY ./GNUmakefile /tinygo/GNUmakefile # bui…   44.6kB    buildkit.dockerfile.v0
<missing>      18 minutes ago       RUN /bin/sh -c apt-get update &&     apt-get…   773MB     buildkit.dockerfile.v0
<missing>      13 days ago          WORKDIR /go                                     0B        buildkit.dockerfile.v0
<missing>      13 days ago          RUN /bin/sh -c mkdir -p "$GOPATH/src" "$GOPA…   0B        buildkit.dockerfile.v0
<missing>      13 days ago          COPY /usr/local/go/ /usr/local/go/ # buildkit   212MB     buildkit.dockerfile.v0
<missing>      13 days ago          ENV PATH=/go/bin:/usr/local/go/bin:/usr/loca…   0B        buildkit.dockerfile.v0
<missing>      13 days ago          ENV GOPATH=/go                                  0B        buildkit.dockerfile.v0
<missing>      13 days ago          ENV GOTOOLCHAIN=local                           0B        buildkit.dockerfile.v0
<missing>      13 days ago          ENV GOLANG_VERSION=1.21.7                       0B        buildkit.dockerfile.v0
<missing>      13 days ago          RUN /bin/sh -c set -eux;  apt-get update;  a…   240MB     buildkit.dockerfile.v0
<missing>      7 days ago           /bin/sh -c set -eux;  apt-get update;  apt-g…   183MB     
<missing>      7 days ago           /bin/sh -c set -eux;  apt-get update;  apt-g…   48.5MB    
<missing>      7 days ago           /bin/sh -c #(nop)  CMD ["bash"]                 0B        
<missing>      7 days ago           /bin/sh -c #(nop) ADD file:73b36e8089732e9bb…   139MB     

The way I read it:

So it looks like we can gain a lot by reducing the size of these layers.

aykevl commented 4 months ago

I think I have a fix to avoid including the entire LLVM build directory, I just need to clean it up to make a PR.

aykevl commented 4 months ago

See: https://github.com/tinygo-org/tinygo/pull/4140. The size now looks like this:

IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
e3e0998cae6c   7 seconds ago   CMD ["tinygo"]                                  0B        buildkit.dockerfile.v0
<missing>      7 seconds ago   ENV PATH=/go/bin:/usr/local/go/bin:/usr/loca…   0B        buildkit.dockerfile.v0
<missing>      7 seconds ago   COPY /tinygo/build/release/tinygo /tinygo # …   893MB     buildkit.dockerfile.v0
<missing>      13 days ago     WORKDIR /go                                     0B        buildkit.dockerfile.v0
<missing>      13 days ago     RUN /bin/sh -c mkdir -p "$GOPATH/src" "$GOPA…   0B        buildkit.dockerfile.v0
<missing>      13 days ago     COPY /usr/local/go/ /usr/local/go/ # buildkit   212MB     buildkit.dockerfile.v0
<missing>      13 days ago     ENV PATH=/go/bin:/usr/local/go/bin:/usr/loca…   0B        buildkit.dockerfile.v0
<missing>      13 days ago     ENV GOPATH=/go                                  0B        buildkit.dockerfile.v0
<missing>      13 days ago     ENV GOTOOLCHAIN=local                           0B        buildkit.dockerfile.v0
<missing>      13 days ago     ENV GOLANG_VERSION=1.21.7                       0B        buildkit.dockerfile.v0
<missing>      13 days ago     RUN /bin/sh -c set -eux;  apt-get update;  a…   240MB     buildkit.dockerfile.v0
<missing>      7 days ago      /bin/sh -c set -eux;  apt-get update;  apt-g…   183MB     
<missing>      7 days ago      /bin/sh -c set -eux;  apt-get update;  apt-g…   48.5MB    
<missing>      7 days ago      /bin/sh -c #(nop)  CMD ["bash"]                 0B        
<missing>      7 days ago      /bin/sh -c #(nop) ADD file:73b36e8089732e9bb…   139MB     

Previously, it looked like this (with a clean git checkout). Note there are various very large layers:

IMAGE          CREATED             CREATED BY                                      SIZE      COMMENT
2a1b0248ec55   2 minutes ago       CMD ["tinygo"]                                  0B        buildkit.dockerfile.v0
<missing>      2 minutes ago       RUN /bin/sh -c cd /tinygo/ &&     make wasi-…   1.04GB    buildkit.dockerfile.v0
<missing>      4 minutes ago       RUN /bin/sh -c cd /tinygo/ &&     make # bui…   280MB     buildkit.dockerfile.v0
<missing>      5 minutes ago       RUN /bin/sh -c cd /tinygo/ &&     rm -rf ./l…   7.27GB    buildkit.dockerfile.v0
<missing>      7 minutes ago       COPY . /tinygo # buildkit                       16.8MB    buildkit.dockerfile.v0
<missing>      49 minutes ago      RUN /bin/sh -c cd /tinygo/ &&     make llvm-…   1.11GB    buildkit.dockerfile.v0
<missing>      About an hour ago   RUN /bin/sh -c cd /tinygo/ &&     make llvm-…   1.72GB    buildkit.dockerfile.v0
<missing>      About an hour ago   COPY ./GNUmakefile /tinygo/GNUmakefile # bui…   44.6kB    buildkit.dockerfile.v0
<missing>      About an hour ago   RUN /bin/sh -c apt-get update &&     apt-get…   773MB     buildkit.dockerfile.v0
<missing>      13 days ago         WORKDIR /go                                     0B        buildkit.dockerfile.v0
<missing>      13 days ago         RUN /bin/sh -c mkdir -p "$GOPATH/src" "$GOPA…   0B        buildkit.dockerfile.v0
<missing>      13 days ago         COPY /usr/local/go/ /usr/local/go/ # buildkit   212MB     buildkit.dockerfile.v0
<missing>      13 days ago         ENV PATH=/go/bin:/usr/local/go/bin:/usr/loca…   0B        buildkit.dockerfile.v0
<missing>      13 days ago         ENV GOPATH=/go                                  0B        buildkit.dockerfile.v0
<missing>      13 days ago         ENV GOTOOLCHAIN=local                           0B        buildkit.dockerfile.v0
<missing>      13 days ago         ENV GOLANG_VERSION=1.21.7                       0B        buildkit.dockerfile.v0
<missing>      13 days ago         RUN /bin/sh -c set -eux;  apt-get update;  a…   240MB     buildkit.dockerfile.v0
<missing>      7 days ago          /bin/sh -c set -eux;  apt-get update;  apt-g…   183MB     
<missing>      7 days ago          /bin/sh -c set -eux;  apt-get update;  apt-g…   48.5MB    
<missing>      7 days ago          /bin/sh -c #(nop)  CMD ["bash"]                 0B        
<missing>      7 days ago          /bin/sh -c #(nop) ADD file:73b36e8089732e9bb…   139MB     
deadprogram commented 4 months ago

Closing since no longer needed.