Decision maker loop problem
There is one basic concept that you are lacking.  At the moment you are looking to see if the button is pressed, not when the button has been pressed.

Instead of just looking to see if it is HIGH you need to look if it was LOW but is now HIGH. It's that transition from LOW to HIGH that you need to use as your trigger for when to set the LED colour, and that means remembering the state of the button the last time you went through the loop.

buttonState = digitalRead(button);
if (buttonState != oldButtonState) {
    oldButtonState = buttonState;
    if(buttonState == H) {
        // Do your stuff
    }
}


oldButtonState is defined the same as buttonState.