# [Ruby], 131 bytes

<!-- language-all: lang-ruby -->

<pre><code>-&gt;n{a=($/+?.*w=n.size*4)*w
a[q=w*w/2]=?F
c=[1,2,3]
n.map{|i|c[j=i/2,2]=c[j+1]*s= ~0**i,-c[j]*s
a[q+=(1+i/2*w)*s]=(68+c[1]).chr}
a}

</code></pre>

[Try it online!][TIO-le0o0ca3]

[Ruby]: https://www.ruby-lang.org/
[TIO-le0o0ca3]: https://tio.run/##TYzBCoJAGITv@xQeOui/6@pqRJc/b73E8h82KdogMU2WUnt1W0NIhoGZj2Ga7vSaLjjFh6o3GG4SXkhwWMnWvs@wjcAxox/owCUZYXFkJWolMpETq@Td1P1gh1Lf0CaZ8AMfuSJoMfikAFbEHvg6f3AMFfczcBG0hOFuz0utKJLltRmZGdlUd882uGidikVE7M8y8fOKzSRf9VwsIpq@ "Ruby – Try It Online"

Takes an array of numbers `0,1,2,3` corresponding to `E,W,S,N` or equivalently `x+=1,x-=1, z+=1,z-=1`. Outputs the path of the cube traced on a string of `w*w` periods, where `w` is four times the length of the input. 

The cube is represented as a vector `c[x,y,z]` starting at `[1,2,3]` which rolls in the `xz` plane. The colour is determined by the current `y` coordinate. If the cube is rotated 180 degrees, the y coordinate becomes negative, so the possible values are `-3,-2,-1,1,2,3` with opposite faces adding to zero. To display, 68 (ascii `D`) is added to the value then this is converted to a character, so the possible displayed colours are `A,B,C,E,F,G`

The vector is rotated by 90 degrees by swapping two coordinates and changing the sign of one of them, similar to Arnauld's answer, but where he uses an array, I use the formula `c[j,2]=c[j+1]*s,-c[j]*s` where `c[j,2]` is a block of 2 array elements starting at `j`=0 or 1 and `s` is the sign of the rotation, +1 or -1.